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

And*_*ech 16 javascript arrays literals

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

但我真的不记得一个优于另一个的优点.

任何人都可以向我解释为什么前者比后者更受欢迎?

这是我能想到为什么[]new Array();以下更好的原因之一:

var Array = function () { };
Run Code Online (Sandbox Code Playgroud)

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

还有其他原因吗?

bar*_*ley 35

简短

它通过线路传输的字节数更少,要解释的字节更少,解析它的心理资源更少.

少即是多.

一致性

这两行代码有什么区别?

var arr = [5];
var arr = new Array(5);
Run Code Online (Sandbox Code Playgroud)

根据这里 new Array(5);不会返回一个带有5的数组,而是返回一个5元素数组,所有元素都是undefined.而这两行返回相同的数组.

var arr = [5,6];
var arr = new Array(5,6);
Run Code Online (Sandbox Code Playgroud)


Mar*_*sey 23

一个很好的理由是因为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"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a最终是一个大小为5的数组,所有元素都是未定义的,而b最终是一个大小为2的数组,其值为[1,2].

var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"
Run Code Online (Sandbox Code Playgroud)

在这里,你最终得到一个单元素数组,包含"5"

通常,您可能永远不应该在Javascript中使用内置类型的构造函数.他们都有像这样奇怪的边缘情况.例如:

var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"
Run Code Online (Sandbox Code Playgroud)


lee*_*ers 8

优雅

简而言之,它看起来更好,程序员更容易解析,特别是对于更复杂的数据结构:

var a = [
    ['a list', 'of', 'strings'],
    [1, 2, 3, 4],
    { hello: "This is an object property." }
];
Run Code Online (Sandbox Code Playgroud)

与笨拙的面向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);
Run Code Online (Sandbox Code Playgroud)