===应该只看数据类型,+[]变成什么数据类型?0是被当作布尔,还是number?求解释为什么+[] === 0 // true
===应该只看数据类型,+[]变成什么数据类型?0是被当作布尔,还是number?求解释为什么+[] === 0 // true
看规范:http://es5.github.io/#x11.4.6
一元加号的语意就是对操作数执行ToNumber()
操作,即将操作数转为数字类型。
对于数组来说,首先调用valueOf
方法,得到的是数组本身,不是原始类型;那么会继续调用toString
方法,得到空字符串''
;接下来会将空字符串转为数字,即0
。
所以:
+[] === 0
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
+
会把右边的操作数转换成数值型,且看unary-plus:而当操作数位数组时,将它
ToNumber
之后,就是0
。有兴趣的,你可以顺着文档一步步点下去看看每一步,在标准中都是如何规定的