我记得在某处读过(我认为这是在Crockford的一篇论文中),使用数组文字[]
比使用new Array();
符号更好。
但我真的不记得一方面有什么好处。
有人可以向我解释为什么前者比后者更受欢迎吗?
以下是我可以考虑为什么[]
优于new Array();
的原因之一:
var Array = function () { };
覆盖Array
对象会破坏代码......!
还有其他原因吗?
答案 0 :(得分:33)
通过网络传输的字节数较少,要解释的字节数较少,解析它的心理资源较少。
少即是多。
这两行代码之间有什么区别?
var arr = [5];
var arr = new Array(5);
根据here new Array(5);
不会返回一个包含5的数组,而是返回一个5元素数组,所有元素都是undefined
。而这两行返回相同的数组。
var arr = [5,6];
var arr = new Array(5,6);
答案 1 :(得分:21)
一个很好的理由是因为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最终是一个大小为2的数组,其值为[1,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"
答案 2 :(得分:7)
简单地说它只是看起来更好并且程序员更容易解析,特别是对于更复杂的数据结构:
var a = [
['a list', 'of', 'strings'],
[1, 2, 3, 4],
{ hello: "This is an object property." }
];
与笨拙的面向OOP的方法相比:
var a = new Array();
var a2 = new Array();
a2.push('a list');
a2.push('of');
a2.push('strings');
var a3 = new Array();
a3.push(1);
a3.push(2);
a3.push(3);
a3.push(4);
var o = new Object();
o.hello = "This is an object property";
a.push(a2, a3, o);
答案 3 :(得分:-1)
new Array(1, 2, 3)
而不是[1, 2, 3]
与new String("cow")
相同而不是"cow"