Почему [5,6,8,7][1,2] = 8 в 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", но я не могу найти, какой тип или операция выполняется.

4 ответа

Решение
[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`.

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

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

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

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

[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

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

Второй массив является указателем на первый массив. Он получит значение для каждого элемента в первом массиве. Например:

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

давай позвоним firstArray = ["a","b","c","d","e"] второй массив будет первая точка б, потому что firstArray[1] = "b", Тогда второй указатель будет указывать на с из-за firstArray[2] = "c", Тогда последний указатель будет указывать на d из-за firstArray[3] = "d", Следовательно, он принимает окончательное значение, которое равно "d". Вы можете посмотреть на это так:

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

Или если вы измените свою последовательность, как это

var firstArray=["a","b","c","d"] 
var arr = firstArray[1,2,0]
console.log(arr) //this will be equal to "a"
Другие вопросы по тегам