3

私の質問はすでに回答されている可能性がありますが、検索エンジンの google または bing で検索リクエストの「+」(プラス) サインが気に入らないため、検索エンジンで見つけることができませんでした。

とにかく、なぜこれがゼロなのか

+[[]][0] // = 0

そしてこれは1つです

++[[]][0] // = 1

UPD: Michael Berkowskiは良い答えを持っていますが、私は1つのことを理解していません

[[]][0]が空の配列に評価される場合、その理由++[]ReferenceError: Invalid left-hand side expression in prefix operation

UPD2: わかり ました..コンソールに ++0 と入力しようとしてエラーが発生したようですが、 var a = 0; を使用する必要があります。++a

4

1 に答える 1

8

これは、そのコンポーネントが評価される方法を分解することによって最もよく調査されます。

[[]][0]単独で空の配列に評価され[]ます。前に追加することにより、単項正の演算子を介して +文字列表現を整数 0 にキャストします ( +4orと言うように)。はちょうどです。-3+00

++数値演算子としても、空の文字列を整数0にキャストしますが、その操作 (プレフィックスのインクリメント) を適用して、結果として 1.

[[]][0]
// [] empty array
[[]][0].toString()
// ""

// Unary + casts the empty string to an integer
+("")
// 0

// Prefix increment on an empty string results in 1 (increments the 0)
var emptyString = "";
++emptyString;
// 1
于 2012-11-25T20:27:19.333 に答える