希望有人可以解释这段简单的代码没有按预期工作:
var arr = new Array(10);
arr.length; // 10. Why? Very wierd.
为什么它会返回10?
答案 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构造函数,而是使用[]构造函数。