JavaScriptで[5,6,8,7] [1,2] = 8になるのはなぜですか?


278

私はこの癖に心を包むことができません。

[1,2,3,4,5,6][1,2,3]; // 4
[1,2,3,4,5,6][1,2]; // 3

私は知って[1,2,3] + [1,2] = "1,2,31,2"いますが、実行されているタイプまたは操作を見つけることができません。

回答:


387
[1,2,3,4,5,6][1,2,3];
      ^         ^
      |         |
    array       +  array subscript access operation,
                    where index is `1,2,3`,
                    which is an expression that evaluates to `3`.

2番目[...]は配列にすることはできないため、配列の添え字操作になります。そして、添え字演算の内容は、オペランドの区切られたリストではなく、単一の式です。

カンマ演算子の詳細については、こちらをご覧ください


7
正しい..最後に使用したインデックス..その他の例:[1,2,3,4,5,6] [1,2,3] === [1,2,3,4,5,6] [3] ; [1,1,1,5,1,1] [3] === [1,1,1,5,1,1] [1,2,3]; このようにして[1,1,1,5,1,1] [3] == 5
mastak

リンクされたWikiエントリがCおよびC ++コンテキストでのコンマ演算子について話しているため、ここコンマ演算子についての詳細を読んでください
Nawaz

108

なぜなら(1,2) == 2。あなたはコンマ演算子に遭遇しました(またはここでの簡単な説明)。

宣言リスト、パラメーターリスト、オブジェクトまたは配列リテラルにカンマが表示されない限り、他の二項演算子と同じように機能します。 x, y評価しx、それを評価yして結果として生成します。


21
[1,2,3,4,5,6][1,2,3];

ここでは2番目のボックスすなわち[1,2,3]なり[3]、あなたが続ければ結果は例えば4になるように、すなわち最後の項目を[1,2,3,4,5,6]配列に

var arr=[1,2,3,4,5,6];

arr[3]; // as [1,2,3] in the place of index is equal to [3]

同様に

*var arr2=[1,2,3,4,5,6];

 // arr[1,2] or arr[2] will give 3*

ただし、間に+演算子を配置すると、2番目の角括弧はインデックスについて言及するためのものではありません。それはむしろ別の配列ですそれがあなたが得る理由です

[1,2,3] + [1,2] = 1,2,31,2

すなわち

var arr_1=[1,2,3];

var arr_2=[1,2];

arr_1 + arr_2; // i.e.  1,2,31,2

基本的に、最初の場合は配列のインデックスとして使用され、2番目の場合はそれ自体が配列です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.