2016-06-15 2 views
0

これは有効であり、JavaScriptで番号1を返します。++ [[]] [0]はエラーを報告するのではなく、なぜ1を返しますか?

++[[]][0] 

は、なぜそれが++[]のようなエラーを報告しないのですか?

++[]と同じではありませんか?

注:これはより少し異なっている:私は何を意味Why does ++[[]][+[]]+[+[]] return the string “10”.

はなぜ++[[]][0]がエラーを報告しないということでしょうか? [[]][0]は変数ですか?

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

http://stackoverflow.com/questions/7202157/why-does-return-the-string-10?rq=1に似ています。 *正確な*重複ではありませんが、それは十分に近くであり、あなたの質問を理解するための要素を提供します。 – j08691

+0

本当の質問は、なぜこのコードを最初に書くのですか? –

答えて

3

The prefix increment operator (++) calls PutValue、およびPutValue throws a ReferenceError when the argument is not a Reference:いない場合は、なぜそれは次のようにエラーを報告しません。 a[]への参照ですが、[]は配列リテラルではなく、参照ですので++[]が有効でないため

var a = []; 
++a; // returns 1 

が有効であるのと同じように、そう

同様に、[[]][0][]への参照であるため、その参照を再度インクリメントします。

これも

++1 // throws ReferenceError 
var a = 1; 
++a // returns 2 
関連する問題