2011-09-14 13 views
258

No puedo dejar de pensar en esta peculiaridad.¿Por qué [5,6,8,7] [1,2] = 8 en JavaScript?

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

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

Respuesta

370
[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.

Más información sobre el operador de coma here.

+4

correctas .. último índice que se utiliza .. 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

101

Porque (1,2) == 2. Te has tropezado con el comma operator (o simpler explanation here).

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, y evalúa x, luego evalúa y y lo obtiene como resultado.

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

Aquí el segundo cuadro es decir [1,2,3] se convierte en [3] es decir, el último elemento lo que el resultado será el 4 de por ejemplo, si se mantiene [1,2,3,4,5,6] en 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] 

de manera similar

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

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

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

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

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 utiliza como índice de la matriz y en el segundo caso, es en sí una matriz.

1

La segunda matriz es un puntero a la primera matriz. Obtendrá valor para cada elemento en la primera matriz. Por ejemplo:

var arr=["a","b","c","d","e"][1,2,3] 

Deja llamada firstArray = ["a","b","c","d","e"] la segunda matriz apuntará primera b porque firstArray[1] = "b". Luego, el segundo puntero apuntará a c debido a firstArray[2] = "c". Luego, el último puntero apuntará a d por firstArray[3] = "d". Por lo tanto, toma el valor final, que es "d". Se puede ver en esta forma:

var firstArray=["a","b","c","d"] 
var arr = firstArray[1,2,3] 
console.log(arr) //this will be equal to "d" 

o si cambia la secuencia de la misma familia

var firstArray=["a","b","c","d"] 
var arr = firstArray[1,2,0] 
console.log(arr) //this will be equal to "a" 
Cuestiones relacionadas