在JavaScript中,为什么[]比新的Array()更受欢迎;?

时间:2009-11-25 23:13:07

标签: javascript arrays literals

我记得在某处读过(我认为这是在Crockford的一篇论文中),使用数组文字[]比使用new Array();符号更好。

但我真的不记得一方面有什么好处。

有人可以向我解释为什么前者比后者更受欢迎吗?

以下是我可以考虑为什么[]优于new Array();的原因之一:

var Array = function () { };

覆盖Array对象会破坏代码......!

还有其他原因吗?

4 个答案:

答案 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"