Dlaczego [5,6,8,7] [1,2] = 8 w JavaScript?

278

Nie mogę się skupić na tym dziwactwie.

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

Wiem [1,2,3] + [1,2] = "1,2,31,2", ale nie mogę znaleźć, jaki typ lub operacja jest wykonywana.

Joe
źródło

Odpowiedzi:

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

Drugi [...]nie może być tablicą, więc jest to operacja na indeksie tablicowym. A zawartość operacji indeksu dolnego nie jest ograniczoną listą operandów, ale pojedynczym wyrażeniem.

Przeczytaj więcej o przecinku tutaj .

Lekkość Wyścigi na orbicie
źródło
7
poprawnie .. ostatnio używany indeks .. więcej przykładów: [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]; w ten sposób [1,1,1,5,1,1] [3] == 5
mastak
Przeczytaj więcej na temat operatora przecinka tutaj jest tak mylącym stwierdzeniem , ponieważ linkowany wpis wiki mówi o operatorze przecinka w kontekście C i C ++, a tutaj masz JavaScript !!
Nawaz
108

Ponieważ (1,2) == 2. Natknąłeś się na operator przecinka (lub prostsze wyjaśnienie tutaj ).

O ile przecinki nie pojawiają się na liście deklaracji, liście parametrów, literale obiektu lub tablicy, działają one jak każdy inny operator binarny. x, yocenia x, a następnie ocenia yi daje to w rezultacie.

Mike Samuel
źródło
21
[1,2,3,4,5,6][1,2,3];

Tutaj drugie pole, tj. [1,2,3]Staje się, [3]tj. Ostatni element, więc wynik wyniesie 4, na przykład, jeśli będziesz trzymał [1,2,3,4,5,6]w tablicy

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

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

podobnie

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

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

Ale kiedy umieścisz operatora + pomiędzy nimi, drugi nawias kwadratowy nie służy do wspominania o indeksie. To raczej kolejna tablica. Właśnie dlatego

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

to znaczy

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Zasadniczo w pierwszym przypadku jest on używany jako indeks tablicy, aw drugim przypadku sam jest tablicą.

Imdad
źródło