Warum ist [5,6,8,7] [1,2] = 8 in JavaScript?

278

Ich kann mich nicht um diese Eigenart kümmern.

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

Ich weiß [1,2,3] + [1,2] = "1,2,31,2", aber ich kann nicht finden, welcher Typ oder welche Operation ausgeführt wird.

Joe
quelle

Antworten:

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

Das zweite [...]kann kein Array sein, daher handelt es sich um eine Array-Indexoperation. Und der Inhalt einer tiefgestellten Operation ist keine begrenzte Liste von Operanden, sondern ein einzelner Ausdruck.

Lesen Sie mehr über den Komma - Operator hier .

Leichtigkeitsrennen im Orbit
quelle
7
korrekt .. zuletzt verwendeter Index .. weitere Beispiele: [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]; auf diese Weise [1,1,1,5,1,1] [3] == 5
mastak
Lesen Sie hier mehr über den Komma-Operator. Dies ist eine irreführende Aussage , da der verknüpfte Wiki-Eintrag über den Komma-Operator im C- und C ++ - Kontext spricht und Sie hier JavaScript haben!
Nawaz
108

Weil (1,2) == 2. Sie sind über den Komma-Operator gestolpert (oder eine einfachere Erklärung hier ).

Sofern Kommas nicht in einer Deklarationsliste, Parameterliste, einem Objekt oder einem Array-Literal erscheinen, verhalten sie sich wie jeder andere binäre Operator. x, ybewertet x, bewertet yund ergibt dies als Ergebnis.

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

Hier ist die zweite Box dh [1,2,3]wird [3]also das letzte Element so das Ergebnis 4 zum Beispiel sein, wenn Sie halten [1,2,3,4,5,6]in einem Array

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

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

ähnlich

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

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

Wenn Sie jedoch einen + -Operator dazwischen platzieren, wird in der zweiten eckigen Klammer der Index nicht erwähnt. Es ist eher ein anderes Array. Deshalb bekommst du

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

dh

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Grundsätzlich wird es im ersten Fall als Array-Index verwendet und im zweiten Fall ist es selbst ein Array.

Imdad
quelle