JavaScript'te neden [5,6,8,7] [1,2] = 8?


278

Aklımı bu tuhaflığın etrafına satamıyorum.

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

Biliyorum [1,2,3] + [1,2] = "1,2,31,2", ama hangi tip veya operasyonun yapıldığını bulamıyorum.

Yanıtlar:


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

İkincisi [...]bir dizi olamaz, bu yüzden bir dizi abonelik işlemi. Ve bir alt simge işleminin içeriği, işlenenlerin sınırlı bir listesi değil, tek bir ifadedir.

Virgül operatörü hakkında daha fazla bilgiyi buradan edinebilirsiniz .


7
doğru .. kullanılan son endeks .. daha fazla örnek: [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]; bu şekilde [1,1,1,5,1,1] [3] == 5
mastak

Virgül operatörü hakkında daha fazla bilgi burada yanıltıcı bir ifadedir , çünkü bağlantılı wiki girişi virgül operatörü hakkında C ve C ++ bağlamında konuşuyor ve burada JavaScript'iniz var !!
Nawaz


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

Burada ikinci kutu yani son öğe [1,2,3]olur [3], böylece örneğin [1,2,3,4,5,6]bir dizide kalırsanız sonuç 4 olur

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

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

benzer şekilde

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

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

Ama arasına bir + operatörü yerleştirdiğinizde, ikinci köşeli parantez indeksten bahsetmek için değildir. Oldukça başka bir dizi Bu yüzden olsun

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

yani

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Temel olarak ilk durumda dizi dizini olarak kullanılır ve ikinci durumda kendisi bir dizidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.