为什么永远不要在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