理解Javascript奇怪的非运算符和空数组表达式
我在准备考试时发现了这个 (!+[]+[]+![]) 表达式,我想知道为什么它在 javascript 中等于“truefalse”?
回答
这里使用的运算符是:
!, 否定,优先级17+, 一元 +, 优先级 17+, 另外, 优先级 14
根据运算符优先级将其间隔开:
(!+[] + [] + ![])
评估 3 个表达式,然后对三个表达式使用加法:
!+[]: 一元+首先将空数组强制转换为数字。数组,当变成基元时,已经.join(',')调用了它们。在这里,没有元素,空字符串是结果,当变成数字时,空字符串是 0,因为它是假的。然后!将其反转并将其转换为布尔值,使其成为true.
(true + [] + ![])
+从左到右操作。如前所述,当空数组被强制转换为原语时,它就变成了空字符串。因此true + []结果为true + '',从而产生字符串'true'。
('true' + ![])
数组是真的。用 反转它的真实性!,你得到false:
('true' + false)
使用+,当任一方不是数字时,双方都被强制为字符串。结果是'truefalse'。