[英]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)
Object.keys(name).length
来访问长度。
的Javascript只知道基于索引的阵列 ,起始于像0。您访问数组元素arr[n]
其中n
是具有整数 n >=0
和n < 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.