试图获得数组长度

时间:2017-11-27 06:10:52

标签: javascript arrays

见下面给出的情景

var x = [];
x['abc'] = "hello";
console.log(x.length); //returns 0

var x = [1,2];
x['abc'] = "hello";
console.log(x.length); //returns 2

这背后的原因还是我错过了什么?

4 个答案:

答案 0 :(得分:5)

根据spec

  

length属性的值在数值上大于名称   每个属性,其名称是数组索引;每当一个   其他是创建或更改Array对象的自有属性   根据需要调整属性以保持这种不变性。

另外

  

具体来说,每当添加名称为数组的属性时   index,length属性的值被改变。

因此,当创建名称为数组索引的属性时,仅调整长度属性,只有长度属性更改

'abc'在添加到数组时是非数字(因此不是数组的索引),不会反映length属性的任何更改。

答案 1 :(得分:2)

写作

var x = [ ];

您正在定义一个标准数组,其中索引只能是integers

x['abc'] = "hello";

当你执行x["abc"] abc时(你用作索引)不是一个整数,你基本上是为arr对象定义一个属性(一切都是javascript中的对象) )但您没有在标准数组中添加元素。因此你的阵列保持原样。

var x = [];
x["abc"] = "hello";
console.log(x);

这就是第一种情况下数组大小为0而第二种情况为2的原因

如果您希望使用xstring keys添加属性,则需要将变量定义为对象。

var x = {}
x['abc'] = "hello";

然后您可以通过

获取对象的大小(实际上是对象中的键数)
Object.keys(x).length

答案 2 :(得分:0)

您所做的是将数组转换为关联数组,其中索引是对指定值的引用。这类似于Javascript中的对象概念。

长度为0,因为真实数组从索引0开始。所以如果检查数组

  

console.log(x [0])// undefined

因此,长度为0.

答案 3 :(得分:0)

你不能在JavaScript中附加不是数字的用户定义键,就像在Python或Php中那样。在JavaScript中,数组的键只能是数字。

这样做:

var x = [];
x['abc'] = "hello";
console.log(x.length);

将x的长度返回为0.因为没有任何内容被推送到数组中。如果你执行console.log(x),你会发现数组没有值或是空的。

这样做:

var x = [1, 2];
x['abc'] = "hello";
console.log(x.length); //returns 2

将长度返回为0,因为数组由索引1处的数字0和该数组的索引/位置2处的数字1组成。数组中只有这些值,如果你想推动"hello"推送它,x.push("hello")将它推到数组的索引2

如果您仍想使用字母索引,请改用Objects