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

时间:2016-12-21 18:56:35

标签: 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.有人可以帮我理解这个吗?

5 个答案:

答案 0 :(得分:2)

javascript Arrays 没有key:value但只是值,您的代码可能应该如下:

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

或者也使用push

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

如果您希望key/value存储数据,可以使用object

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

希望这有帮助。

答案 1 :(得分:1)

您面临的问题是:
在JavaScript中,数组由索引(例如0,1,2,3 ...)访问。您正在做的是将密钥分配给public class Fish extends Pet { } 。而不是这个,只需使用

&#13;
&#13;
public class Pet {
}
&#13;
&#13;
&#13;
或者,您可以访问您创建的对象的长度,如下所示:
&#13;
&#13;
public class Fish {

Pet myPet = new Pet ();
}
&#13;
&#13;
&#13;
这是有效的,因为尽管您将其定义为数组,但JavaScript数组仍然是对象,因此您可以使用person2来访问长度。

答案 2 :(得分:0)

Javascript只知道基于索引的数组,从0开始。您可以访问arr[n]等数组元素,其中n整数 { {1}}和n >=0。您已尝试使用字符串而不是整数。

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

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

1

答案 3 :(得分:0)

Javascript中的数组是对象 - 因此,当你这样做时:

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

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

答案 4 :(得分:0)

对于第一个,你将获得4,因为它是基于索引的数组。

所以JavaScript会将4指针放在堆栈上的位置

,第二个是关联数组。所以根本没有索引。我们只能基于密钥或使用for-each访问它。

在第2位,你将获得下面的长度3。

double randomDouble = rng.nextDouble() * range;