我当时正在准备考试,我发现了这个表达式(!+[]+[]+![]),我想知道为什么它等于javascript中的"truefalse“?
发布于 2020-12-07 01:00:24
此处使用的操作人员如下:
!,否定,优先 17+,一元+优先17+,加法,优先14根据运算符优先级将其间隔:
(!+[] + [] + ![])计算这三个表达式,然后在这三个表达式上使用加法:
!+[]:一元+首先将空数组强制为一个数字。数组在转换为原语时,会让.join(',')调用它们。在这里,没有元素,结果是空字符串,而空字符串在转换为数字时是0,因为它是falsey。然后!将其反转并将其转换为布尔值,使其为true。
(true + [] + ![])+从左到右操作.如前所述,当空数组被胁迫到原语时,它就变成了空字符串。因此,true + []导致true + '',导致字符串'true'。
('true' + ![])数组是真实的。用!反演这一点的真实性,然后得到false
('true' + false)对于+,当任何一方都不是数字时,双方都会被迫使用字符串。结果是'truefalse'。
https://stackoverflow.com/questions/65174737
复制相似问题