解释为什么+[] == 0
给出输出'true'在 JavaScript 中?
请检查示例。
+[] == 0 ? alert(true) : alert(false);
并且还要检查。'1+[+[]]'
给出输出'10'
它将被评估如下,
1 : +[] == 0
--> +"" == 0
操作员+
是具有最高优先级 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence than ==
所以首先会对其进行评估。因此,在将数组转换为数字的过程中,ToPrimitive() http://www.ecma-international.org/ecma-262/5.1/#sec-9.1函数将通过将其作为参数传递来调用。自从[]
is an object
,它将返回""
string
2 : +"" == 0
--> 0 == 0
空字符串将被转换为0
。非空字符串将被转换为NaN
众所周知。
3 : 0 == 0
--> true
最后按照抽象相等比较算法 http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3,当两个相同类型的操作数进行比较时,不会发生进一步的评估,它会直接检查其是否相等并返回结果。
在你的第二种情况下1+[+[]]
,评估将会发生,
1 : 1+[+[]]
- ( +[]
将首先转换为原始类型,因为[]
它是一个物体)
2 : 1+[+""]
( toPrimitive([]) http://www.ecma-international.org/ecma-262/5.1/#sec-9.1将""
)
3 : 1+[0]
( 0
当您将空字符串转换为数字时将产生 )
4 : 1+"0"
( toPrimitive([0]) http://www.ecma-international.org/ecma-262/5.1/#sec-9.1将"0"
)
5 : "10"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)