Por que [5,6,8,7] [1,2] = 8 em JavaScript?

278

Eu não consigo entender essa peculiaridade.

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

Eu sei [1,2,3] + [1,2] = "1,2,31,2", mas não consigo encontrar que tipo ou operação está sendo executada.

Joe
fonte

Respostas:

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

O segundo [...]não pode ser uma matriz, portanto é uma operação de subscrito da matriz. E o conteúdo de uma operação subscrita não é uma lista delimitada de operandos, mas uma única expressão.

Leia mais sobre o operador de vírgula aqui .

Raças de leveza em órbita
fonte
7
correto .. último índice usado .. mais exemplos: [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]; desta maneira [1,1,1,5,1,1] [3] == 5
mastak 14/09/11
Leia mais sobre o operador de vírgula aqui é uma declaração enganosa , pois a entrada wiki vinculada fala sobre o operador de vírgula no contexto C e C ++, e aqui você tem JavaScript !!
Nawaz
108

Porque (1,2) == 2. Você encontrou o operador de vírgula (ou uma explicação mais simples aqui ).

A menos que vírgulas apareçam em uma lista de declarações, lista de parâmetros, objeto ou literal de matriz, elas agem como qualquer outro operador binário. x, yavalia x, avalia ye produz isso como resultado.

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

Aqui a segunda caixa, ou seja, [1,2,3]torna-se [3]o último item, portanto o resultado será 4, por exemplo, se você mantiver [1,2,3,4,5,6]uma matriz

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

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

similarmente

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

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

Mas quando você coloca um operador + no meio, o segundo colchete não é para mencionar o índice. É uma outra matriz É por isso que você obtém

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

ie

var arr_1=[1,2,3];

var arr_2=[1,2];

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

Basicamente, no primeiro caso, é usado como índice de matriz e, no segundo caso, é ele próprio uma matriz.

Imdad
fonte