Javascript 新关键字 .length 无效

Javascript new keyword .length not working

希望有人能阐明这段没有按预期工作的简单代码:

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

为什么 return 10?

您用十个元素实例化了数组

我制作了一个包含 10 个单元格的数组...所以它 returns 10 :)

您想做的事情:

var arr = [10]

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

If the only argument passed to the Array constructor is an integer between 0 and 232-1 (inclusive), this returns a new JavaScript array with its length property set to that number

因此不可能使用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.

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

int[] a = new int[10];

或 C#:

int[] array = new int[5];

在Java脚本中,当你写:

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

如果你写:

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

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

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构造函数,而是使用[]构造函数。