数组长度属性JS的未注册成员

我遇到了这个代码,用于保持数组中的正向和反向引用:

var arr = []; arr[arr['A'] = 0] = 'A'; arr[arr['B'] = 1] = 'B'; // On node interpreter arr // [ 'A', 'B', A: 0, B: 1 ] arr["A"] // 0 arr["B"] // 1 arr[0] // 'A' arr[1] // 'B' arr[2] // 'undefined' arr.length // 2 

A: 0, B: 1成员被推到数组的末尾。

什么是这些成员,以及在这个过程中发生了什么, .length属性logging2而不是4?

将string键值存储到数组中并不实际修改数组。 它只向Array对象添加一个dynamic字段,而不像数字索引那样存储数字索引,这实际上将一个值推入数组中Array.length只反映数组中由元素pipe理的元素的数量,而不是数组中的dynamic字段数。

 var arr = []; arr["A"] = 2; 

在这里,您正在向数组对象添加一个属性,该属性不反映数组中元素的数量。在JavaScript中,数组的元素总是使用索引进行存储。 Array.length总是返回存储在数组中的元素的数量。