为什么++ [[]] [0]返回1而不是报告错误?

时间:2016-06-15 13:37:51

标签: javascript

这是有效的,并在JavaScript中返回数字1:

++[[]][0]

为什么不报告++[]之类的错误?

它与++[]相同吗?

注意:这与:Why does ++[[]][+[]]+[+[]] return the string “10”.

略有不同

我的意思是,为什么++[[]][0]报告错误? [[]][0]是变量吗?如果没有,为什么不报告错误,如:

++[] // returns Invalid left-hand side expression in prefix operation.

1 个答案:

答案 0 :(得分:3)

The prefix increment operator (++) calls PutValuePutValue 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