¿Por qué [5,6,8,7] [1,2] = 8 en JavaScript?

278

No puedo pensar en este capricho.

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

Lo sé [1,2,3] + [1,2] = "1,2,31,2", pero no puedo encontrar qué tipo u operación se está realizando.

Joe
fuente

Respuestas:

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

El segundo [...]no puede ser una matriz, por lo que es una operación de subíndice de matriz. Y el contenido de una operación de subíndice no es una lista delimitada de operandos, sino una sola expresión.

Lea más sobre el operador de coma aquí .

Carreras de ligereza en órbita
fuente
77
correcto .. último índice utilizado .. más ejemplos: [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]; de esta manera [1,1,1,5,1,1] [3] == 5
mastak
¡Lea más sobre el operador de coma aquí es una declaración tan engañosa , ya que la entrada wiki vinculada habla sobre el operador de coma en contexto C y C ++, y aquí tiene JavaScript!
Nawaz
108

Debido (1,2) == 2. Te has topado con el operador de coma (o una explicación más simple aquí ).

A menos que las comas aparezcan en una lista de declaración, lista de parámetros, objeto o matriz literal, actúan como cualquier otro operador binario. x, yevalúa x, luego evalúa yy produce eso como resultado.

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

Aquí el segundo cuadro, es decir, se [1,2,3]convierte en [3]el último elemento, por lo que el resultado será 4, por ejemplo, si mantiene [1,2,3,4,5,6]una matriz

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

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

similar

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

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

Pero cuando coloca un operador + en el medio, el segundo corchete no es para mencionar el índice. Es más bien otra matriz. Es por eso que obtienes

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

es decir

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Básicamente, en el primer caso se usa como índice de matriz y en el segundo caso es en sí misma una matriz.

Soy papá
fuente