javascript +[] === 0 // true 为什么?

===应该只看数据类型,+[]变成什么数据类型?0是被当作布尔,还是number?求解释为什么+[] === 0 // true

阅读 2.6k
2 个回答

+会把右边的操作数转换成数值型,且看unary-plus

图片描述

而当操作数位数组时,将它ToNumber之后,就是0。有兴趣的,你可以顺着文档一步步点下去看看每一步,在标准中都是如何规定的

看规范:http://es5.github.io/#x11.4.6

一元加号的语意就是对操作数执行ToNumber()操作,即将操作数转为数字类型。

对于数组来说,首先调用valueOf方法,得到的是数组本身,不是原始类型;那么会继续调用toString方法,得到空字符串'';接下来会将空字符串转为数字,即0

所以:

+[] === 0
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题