这是有效的,并在JavaScript中返回数字1:
++[[]][0]
为什么不报告++[]
之类的错误?
它与++[]
相同吗?
注意:这与:Why does ++[[]][+[]]+[+[]] return the string “10”.
略有不同我的意思是,为什么++[[]][0]
报告错误? [[]][0]
是变量吗?如果没有,为什么不报告错误,如:
++[] // returns Invalid left-hand side expression in prefix operation.
答案 0 :(得分:3)
The prefix increment operator (++
) calls PutValue和PutValue throws a ReferenceError when the argument is not a Reference。
所以就像
一样var a = [];
++a; // returns 1
是有效的,因为a
是对[]
的引用,但++[]
无效,因为[]
是数组文字,而不是引用。
同样,[[]][0]
是对[]
的引用,因此递增该引用又是有效的。
这也类似于
++1 // throws ReferenceError
var a = 1;
++a // returns 2