此问题来源于看这篇文章js隐式装箱-ToPrimitive 中有关于隐式类型转换的叙述,但是看到文章倒数第二部分的一个例子的时候,产生了疑惑:其中的第三步,即++[[]][0] 也就等于++[]。但是直接运行++[],会产生如下报错:改成 + +[] 的方式执行,也只能得到0,不能得到1.思索许久还是不能理解,望各位不吝赐教!
3 回答
largeQ
TA贡献2039条经验 获得超7个赞
其中的第三步,即++[[]][0] 也就等于++[]。但是直接运行++[],会产生如下报错:
原因:JavaScript权威指南-第6版-中p72
[[]][0]
是数组元素,[]
是数组,所以[[]][0]
不报错,[]
报错;
改成 + +[] 的方式执行,也只能得到0,不能得到1.
原因:JavaScript高级程序设计-第3版-中p38
所以题主的这个代码+ +[]
相当于:
+ +[]
+ Number([])//Number([])===0
+ 0
婷婷同学_
TA贡献1844条经验 获得超8个赞
++ 这个操作符后面必须跟一个引用,然后原值会被ToNumber
RTF tc39
如果跟的不是一个引用,那自然就抛错咯:
++1 // 错
i = ++[] // 错
i = ++1 // 错
翻了一下犀牛书,说++的「操作数是一个左值(lvalue)(变量、数组元素或对象属性)」,这一句也能解释你的问题。
添加回答
举报
0/150
提交
取消