为什么在JavaScript中[5,6,8,7] [1,2] = 8?

Why does [5,6,8,7][1,2] = 8 in JavaScript?

我无法为这个怪癖着迷。

1
2
[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",但是我找不到正在执行的类型或操作。


1
2
3
4
5
6
[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
[1,2,3,4,5,6][1,2,3];

在这里第二个框,即[1,2,3]变为[3],即最后一个项目,因此结果将为4
例如,如果您将[1,2,3,4,5,6]保留在数组中

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

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

类似地

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

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

但是,当您在它们之间放置一个+运算符时,第二个方括号就不会提及索引。它是另一个数组
这就是为什么你得到

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

1
2
3
4
5
var arr_1=[1,2,3];

var arr_2=[1,2];

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

基本上,在第一种情况下,它用作数组的索引,在第二种情况下,它本身就是数组。