Mengapa [5,6,8,7] [1,2] = 8 dalam JavaScript?

278

Saya tidak bisa membungkus pikiran saya dengan kekhasan ini.

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

Saya tahu [1,2,3] + [1,2] = "1,2,31,2", tetapi saya tidak dapat menemukan jenis atau operasi apa yang sedang dilakukan.

Joe
sumber

Jawaban:

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`.

Yang kedua [...]tidak bisa berupa array, jadi ini adalah operasi subscript array. Dan isi operasi subskrip bukan daftar operan yang dibatasi, tetapi ekspresi tunggal.

Baca lebih lanjut tentang operator koma di sini .

Lightness Races di Orbit
sumber
7
benar .. indeks terakhir digunakan .. lebih banyak contoh: [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]; dengan cara ini [1,1,1,5,1,1] [3] == 5
mastak
Baca lebih lanjut tentang operator koma di sini adalah pernyataan yang menyesatkan , karena entri wiki yang ditautkan berbicara tentang operator koma dalam konteks C dan C ++, dan di sini Anda memiliki JavaScript !!
Nawaz
108

Karena (1,2) == 2. Anda sengaja menemukan operator koma (atau penjelasan sederhana di sini ).

Kecuali koma muncul dalam daftar deklarasi, daftar parameter, objek atau array literal, mereka bertindak seperti operator biner lainnya. x, ymengevaluasi x, lalu mengevaluasi ydan menghasilkan itu sebagai hasilnya.

Mike Samuel
sumber
21
[1,2,3,4,5,6][1,2,3];

Di sini kotak kedua yaitu [1,2,3]menjadi [3]item terakhir sehingga hasilnya akan menjadi 4 misalnya jika Anda menyimpan [1,2,3,4,5,6]dalam array

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

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

demikian pula

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

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

Tetapi ketika Anda menempatkan operator + di antara maka braket kuadrat kedua bukan untuk menyebutkan indeks. Ini adalah array lain. Itu sebabnya Anda dapatkan

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

yaitu

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Pada dasarnya dalam kasus pertama digunakan sebagai indeks array dan dalam kasus kedua itu sendiri merupakan array.

Imdad
sumber