JavaScript数组转换为数字

12

可能是重复问题:
你能解释为什么++[[]][+[]]+[+[]]=10吗?

我想了几天,我知道 JavaScript 中的一元加号首先将其操作数转换为数字。我将 + 应用于一个空数组,然后得到以下结果:

+[] == 0

当我执行以下操作时:

+[1] == 1

但是:

+[1,2] == NaN

最后两个问题几乎都很清楚了,但是为什么空数组等于0?!这与以下内容有关:

[] == false

有时候ECMAScript让我感到很困惑...

alert([![]+[]][+[]][+[]]+[![]+[]][+[]][+!+[]]+[!+[]+[]][+![]][+![]]+[![]+[]][+[]][+!+[]]+[![]+[]][+[]][+!+[]+!+[]]+' '+(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);

最好的问候!


7
在这个链接中(https://dev59.com/uWw05IYBdhLWcg3wfx80#7202287),我对`+[] === 0`进行了解释。请注意,该表达式的意思是将空数组转换为数字并与零进行比较。 - pimvdb
1个回答

7
空的 Array 的字符串形式是一个空字符串:
> [].toString()
""

一元运算符 + 将会将内容转换为 Number 对象,即将空字符串转换成 0:
> Number("")
0

这就是为什么+[] == 0成立的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接