Javascript新关键字.length无效

时间:2017-12-24 16:59:59

标签: javascript arrays variable-length

希望有人可以解释这段简单的代码没有按预期工作:

var arr = new Array(10);
arr.length; // 10. Why? Very wierd.

为什么它会返回10?

4 个答案:

答案 0 :(得分:4)

您使用十个元素

实例化数组

答案 1 :(得分:3)

我创建一个包含10个单元格的数组...所以它返回10:)

你想这样做:

var arr = [10]

答案 2 :(得分:3)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

  

如果传递给Array构造函数的唯一参数是整数   在0到232-1(含)之间,这将返回一个新的JavaScript数组   将其length属性设置为该数字

因此,使用new关键字创建一个只包含一个数字元素的新数组是不可能的。

但你可以这样做:



var arr = [10]; // Creates a new array with one element (the number 10)
console.log(arr.length); // displays 1 because the array contains one element.




答案 3 :(得分:1)

它返回10,因为你只给一个整数作为参数给Array构造函数。在这种情况下,新的Array构造函数就像某些编程语言一样,您需要为数组指定内存,这样就不会得到那些ArrayIndexOutOfBounds Exceptions。 Java中的一个例子:

int[] a = new int[10];

或C#:

int[] array = new int[5];

在Javascript中,当你写:

var a = new Array(10);
a[0] // returns undefined
a.length // returns 10.

如果你写:

a.toString() // returns ",,,,,,,,,", a comma for each element + 1

但是,由于Javascript不需要为数组分配内存,最好使用[]构造函数:

var a = [10];
a[0] //returns 10
a.length //returns 1

我认为让所有人感到困惑的是:

var a = new Array(1,2,3,4,5);
a[0] // returns 1
a.length // returns 5

但你可以用这种方式做同样的事情:

var a = [1,2,3,4,5];
a[0] // returns 1
a.length // returns 5

因此,总之,尽量避免使用新的Array构造函数,而是使用[]构造函数。