为什么JavaScript中的 = 8?

我无法围绕这个怪癖绕开我的思绪。

[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" ,但我无法find正在执行的types或操作。

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

第二个不能是一个数组,所以它是一个数组下标操作。 下标操作的内容不是分隔的操作数列表,而是单个expression式。

在这里了解更多关于逗号运算符的信息 。

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

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

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

这里第二个盒子[1,2,3]变成[3]即最后一个项目,所以如果你将[1,2,3,4,5,6]放在一个数组中,结果将会是4

 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* 

但是当你在中间放置一个+运算符时,第二个方括号就不用提索引。 这是另一个arrays这就是为什么你得到

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

 var arr_1=[1,2,3]; var arr_2=[1,2]; arr_1 + arr_2; // ie 1,2,31,2 

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

第二个数组是指向第一个数组的指针。 它将获得第一个数组中的每个项目的值。 例如:

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

firstArray = ["a","b","c","d","e"]第二个数组首先指向b,因为firstArray[1] = "b" 。 那么第二个指针会指向c,因为firstArray[2] = "c" 。 然后,由于firstArray[3] = "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"