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