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)
简而言之,它看起来更好,程序员更容易解析,特别是对于更复杂的数据结构:
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)