可能重复:
Create an empty object in JavaScript with {} or new Object()?
当我想声明一个新数组时,我使用这种表示法
var arr = new Array();
但是当在线测试时,例如在jsbin上,警告会向我发出“使用数组文字符号[]。”
我没有找到避免使用构造函数的理由。在某种程度上比使用[]
效率低吗?或者这是不好的做法?
是否有充分理由使用var arr = [];
代替var arr = new Array();
?
答案 0 :(得分:7)
[]
是:
new Array(3)
和new Array(3,3)
做完全不同的事情示例代码:
var a = new Array(3);
var b = new Array(3,3);
Array = function () { return { length: "!" }; };
var c = new Array();
var d = [];
alert(a.length); // 3
alert(b.length); // 2
alert(c.length); // !
alert(d.length); // (still) 0
此代码live - 将尝试创建4个警报!
答案 1 :(得分:5)
大多数情况下,人们使用var a = []
因为Douglas Crockford这样说。
他的理由包括新的Array()的非直观和不一致的行为:
var a = new Array(5); // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it
请注意,new Array()
无法创建只包含一个预先指定的数字元素的数组!
使用[]实际上更有效,也更安全!可以覆盖Array构造函数并使它做奇怪的事情,但你不能覆盖[]的行为。
就个人而言,我总是使用[]语法,同样总是使用{}语法代替新的Object()。
答案 2 :(得分:0)
答案 3 :(得分:0)
在javascript中,你应该尽可能使用文字。
var a = [];
代替var o = new Array();
var o = {};
代替var o = new Object();
同样,请勿执行new String("abc");
,new Number(1);
等操作。
答案 4 :(得分:0)
JavaScript是一种原型语言,而不是像C#这样的经典语言。尽管JavaScript确实有一个看起来很像C#的新运算符,但你不应该用它来创建新的对象或数组。
//Bad way to declare objects and arrays
var person = new Object(),
keys = new Array();
新的关键词被部分添加到语言中以安抚古典语言,但实际上它往往会让开发人员感到困惑而不是帮助他们。相反,JavaScript中存在声明对象和数组的本机方式,您应该使用它们。
您应该使用文字表示法来声明对象和数组,而不是使用以前的语法。
//Preferred way to declare objects and arrays
var person = {},
keys = [];
使用这种模式,你实际上可以使用Object Literals和数组初始化器语法获得很多表现力。
//Preferred way to declare complex objects and arrays
var person = {
firstName: "Elijah",
lastName: "Manor",
sayFullName: function() {
console.log( this.firstName + " " +
this.lastName );
}
},
keys = ["123", "676", "242", "4e3"];
最佳实践
您应该使用文字符号声明所有变量,而不是使用新操作。以类似的方式,您不应将new关键字用于Boolean,Number,String或Function。他们所做的只是增加额外的膨胀和缓慢的事情。
使用new关键字的唯一真正原因是,如果要创建新对象,并且希望它使用您定义的构造函数。有关此主题的更多信息,请查看Douglas Crockford的帖子,标题为JavaScript,We Hardly new Ya。