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

281

我无法理解这个怪异的问题。

[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个回答

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

第二个[...]不能是数组,所以它是一个数组下标操作。而下标操作的内容不是一组用逗号分隔的操作数,而是一个单独的表达式。 在这里阅读有关逗号运算符的更多信息。

8
正确的写法是:最后使用的索引号.. 更多例子: [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。 - mastak

110
因为 (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
基本上在第一个情况下,它被用作数组的索引,在第二个情况下,它本身就是一个数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接