可能重复:
用{}或new object()在JavaScript中创建一个空对象?
当我想声明一个新的数组时,我使用这个符号
var arr = new Array();
但是当在线测试时,例如在jsbin上测试时,会有一条警告信号通知我"使用数组文字符号[]"
我没有找到避免使用构造函数的理由。在某种程度上是否比使用[]
效率更低?还是这种做法不好?
是否有充分的理由使用var arr = [];
而不是var arr = new Array();
?
[]
是:
- 较短
- 更清晰
- 不受制于
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
此代码实时-将尝试创建4个警报!
大多数情况下,人们使用var a = []
是因为Douglas Crockford这么说。
他的原因包括new 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构造函数并使其做一些奇怪的事情,但不能覆盖[]的行为。
就我个人而言,我总是使用[]语法,同样地,我总是用{}语法代替new Object()。
建议使用
var arr = [];
已在此处回答
在javascript中,您应该尽可能使用文字。
var a = [];
代替var o = new Array();
var o = {};
代替var o = new Object();
类似地,不要执行new String("abc");
、new Number(1);
等操作。
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"];
最佳实践
您应该使用所有变量的文字符号来声明它们,而不是使用新的操作。以类似的方式,您不应该为Boolean、Number、String或Function使用新关键字。他们所做的只是增加额外的膨胀并减缓速度。
使用new关键字的唯一真正原因是,如果您正在创建一个新对象,并且希望它使用您定义的构造函数。有关这个主题的更多信息,你可以查看Douglas Crockford的帖子,标题为JavaScript,We Hardly new Ya。