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.

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 .


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.