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

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

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

这是我能想到为什么 [] 优于 new Array();

的原因之一
var Array = function () { };

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

还有其他原因吗?

有帮助吗?

解决方案

简洁

通过网络传输的字节数较少,要解释的字节数较少,解析它的心理资源较少。

少即是多。

一致性

这两行代码之间有什么区别?

var arr = [5];
var arr = new Array(5);

根据此处 new Array(5); 不会返回一个包含5的数组,而是返回一个5元素数组,所有元素都是 undefined 。而这两行返回相同的数组。

var arr = [5,6];
var arr = new Array(5,6);

其他提示

一个很好的理由是因为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"

简单地说它只是看起来更好并且程序员更容易解析,特别是对于更复杂的数据结构:

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);

new Array(1,2,3)而不是 [1,2,3] new String(" cow")相同而不是" cow"

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top