繁体   English   中英

无法理解Javascript数组的这种行为

[英]Trouble understanding this behaviour of Javascript arrays

当这个让我措手不及时,我试图解决一些Javascript问题。 看看以下片段,

var person = [];
person['1'] = "John";
person['2'] = "Doe";
person['3'] = 46; 
//[1: "John", 2: "Doe", 3: 46]
console.log(person);
//4 <-- as i expected
console.log(person.length);

var person2 = [];
person2['a'] = "John";
person2['b'] = "Doe";
person2['c'] = 46; 
//[1: "John", 2: "Doe", 3: 46]
console.log(person2);
//0 <-- i expected 4, but got 0
console.log(person2.length)

我在注释中添加了输出。

我试图弄清楚为什么

console.log(person2.length)

给出长度0而不是4。有人可以帮助我理解这一点吗?

javascript 数组没有key:value而只有value,您的代码可能看起来像:

 var person = []; person[0] = "John"; person[1] = "Doe"; person[2] = 46; console.log(person); console.log(person.length); 

或者也可以使用push

 var person = []; person.push("John"); person.push("Doe"); person.push(46); console.log(person); console.log(person.length); 

如果要key/value存储数据,则可以使用object

 var person = {}; person['1'] = "John"; person['2'] = "Doe"; person['3'] = 46; console.log(person); console.log(Object.keys(person).length); 

希望这可以帮助。

您面临的问题是:
在JavaScript中,通过数组的索引 (例如0、1、2、3 ..)访问数组。 您正在做的就是为person2分配一个和一个 代替此,只需使用

 var person2 = []; person2[0] = "John"; person2[1] = "Doe"; person2[2] = 46; 

或者,您可以像这样访问创建的对象的长度:
 var person2 = []; person2['a'] = "John"; person2['b'] = "Doe"; person2['c'] = 46; console.log(person2); //[1: "John", 2: "Doe", 3: 46] console.log(Object.keys(person2).length) 

之所以可行,是因为尽管您将其定义为数组,但是JavaScript数组无论如何都是对象,因此您可以使用Object.keys(name).length来访问长度。

的Javascript只知道基于索引的阵列 ,起始于像0。您访问数组元素arr[n]其中n是具有整数 n >=0n < arr.length 您尝试使用字符串而不是整数。

此外,由于数组是Javascript中的对象,因此您还可以使用person['1'] = "John";向该对象添加属性person['1'] = "John"; 由于数组也是Javascript中的对象,因此这会在person对象上创建名为1的属性。

在对象上,可以通过两种方式访问​​(或创建)属性:

var obj = {};
// variant one using dot-notation
obj.prop = "whatever";
// identical result, different syntax:
obj["prop"] = "whatever";

Javascript中的数组是对象,因此,当您执行以下操作时:

person2['a'] = "John";
person2['b'] = "Doe";
person2['c'] = 46; 

您正在设置person2对象的属性。 如果您想以更array.push方式将项目添加到数组中,建议查看array.push

对于第一个,您将获得4,因为其基于索引的数组。

因此JavaScript会将指针在堆栈上的位置数为4

第二个是其关联数组。 因此完全没有索引。我们只能基于键或使用for-each来访问它。

在第二个中,您将获得下面给出的长度3。

var person = [];
person.push("John");
person.push("Doe");
person.push(46); 
console.log(person);
console.log(person.length);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM