理由の1つは、Arrayコンストラクターの動作が完全に直感的でないためです。例えば:
var a = new Array(5);
console.log(a.length); //prints "5"
console.log(a[0]); //prints "undefined"
var b = new Array(1,2);
console.log(b.length); //prints "2"
console.log(b[0]); //prints "1"
この場合、aはすべての要素が未定義のサイズ5の配列になり、bは値[1,2]のサイズ2の配列になります。
var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"
そして、ここでは、「5」を含む単一要素の配列になります。
一般に、 Javascriptの組み込み型でコンストラクターを使用することはおそらく絶対にしないでください。それらはすべて、このような奇妙なエッジケースを持っています。例えば:
var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"