我无法理解这个怪癖。
[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] + [1,2] = "1,2,31,2"
因为(1,2) == 2。你偶然发现了逗号操作符(或这里有更简单的解释)。
(1,2) == 2
除非逗号出现在声明列表、参数列表、对象或数组文字中,否则它们的作用与任何其他二进制操作符相同。x, y求x,然后求y并将其作为结果。
x, y
x
y
[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]变成[3],即最后一项,因此结果将是4 例如,如果你将[1,2,3,4,5,6]保存在数组
[1,2,3]
[3]
[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
基本上,在第一种情况下,它被用作数组的索引,在第二种情况下,它本身就是一个数组。