为什么永远不要在Javascript中使用new Array(示例)

・3 分钟阅读

我喜欢javascript,但是,有时它似乎不喜欢我,例如Array构造函数。


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

想尝试一下这是什么?


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

只有在为数组构造函数提供一个整数时才会发生这种情况。为什么new Array构造函数从某些编程语言中获取一个页面,这样你就不会得到ArrayIndexOutOfBounds异常,


int *a = (int *) malloc( 10*sizeof(int) ); // ya ol' c
int *a = new int[10]; // c++
int[] a = new int[10]; // java

是的,它实际上是创建长度为10的数组,Javascript中没有sizeof函数,但是toString足以证明它。

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

你还会如何创建一个X长度数组? 这里的问题是,我从未需要在数组中定义大小,因为Javascript不需要为数组分配内存,他们更喜欢...... ArrayLists,如果你想要上所有的计算机科学。例如,以下代码在Javascript中是有效的:


a.pop(); // returns last object of array, removes it
a.push(20); // puts 20 as the last element of the array, returns length
a.shift(); // returns first object of the array, removes it
a.unshift(30); // puts 30 as the first element of the array, returns length

使用new Array[int]并没有什么意义,使用,并且会在Javascript中提示混淆,为什么,因为javascript的原生方法认为你知道这一点。例如想象一下。


var a = new Array(10);
a.push(30); // returns 11, which if it were a proper stack/queue it would return 10
a.toString() // returns",,,,,,,,,,20", probably not what you want

我们应该总是使用[]构造函数来避免这种事情。


var a = [10]
a.toString() // returns"10"
a[0] // returns 10
a.length // returns 1
方玉 profile image