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

IT技术 javascript
2021-01-20 14:06:18

我无法理解这个怪癖。

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

3个回答
[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,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
2021-04-08 14:06:18

因为(1,2) == 2您偶然发现了逗号运算符(或此处更简单的解释)。

除非逗号出现在声明列表、参数列表、对象或数组文字中,否则它们的作用就像任何其他二元运算符。 x, y评估x,然后评估y并产生结果。

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

这里的第二个框 ie[1,2,3]成为[3]ie 最后一个项目,因此结果将是 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

IE

var arr_1=[1,2,3];

var arr_2=[1,2];

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

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