Почему [5,6,8,7] [1,2] = 8 в JavaScript?

278

Я не могу обдумать эту причуду.

[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", но я не могу найти, какой тип или операция выполняется.

Джо
источник

Ответы:

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

Второй [...]не может быть массивом, поэтому это операция с индексом массива. И содержимое операции с индексом - это не список операндов с разделителями, а одно выражение.

Подробнее об операторе запятой здесь .

Гонки легкости на орбите
источник
7
правильно .. последний использованный индекс .. больше примеров: [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]; таким образом [1,1,1,5,1,1] [3] == 5
мастак
Узнайте больше об операторе запятой, вот такое вводящее в заблуждение утверждение , поскольку связанная вики-запись рассказывает об операторе запятой в контексте C и C ++, и здесь у вас есть JavaScript !!
Наваз
108

Потому что (1,2) == 2. Вы наткнулись на оператор запятой (или более простое объяснение здесь ).

Если запятые не появляются в списке объявлений, списке параметров, объекте или литерале массива, они действуют как любой другой двоичный оператор. x, yоценивает x, затем оценивает yи выдает это как результат.

Майк Самуэль
источник
21
[1,2,3,4,5,6][1,2,3];

Здесь второй блок, т.е. [1,2,3]становится, [3]т. Е. Последний элемент, поэтому результат будет 4, например, если вы храните [1,2,3,4,5,6]в массиве

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

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

так же

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

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

Но когда вы ставите оператор + между ними, вторая квадратная скобка не предназначена для упоминания индекса. Это скорее другой массив, поэтому вы получаете

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

т.е.

var arr_1=[1,2,3];

var arr_2=[1,2];

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

По сути, в первом случае он используется как индекс массива, а во втором случае он сам является массивом.

Имдад
источник