当我想声明一个新数组时,我使用这个符号
var arr = new Array();
但是当在线测试时,例如在 jsbin 上,一个警告信号告诉我“使用数组文字符号 []”。
我没有找到避免使用构造函数的理由。在某种程度上比使用效率低[]
吗?或者这是不好的做法?
是否有充分的理由使用var arr = [];
而不是var arr = new Array();
?
当我想声明一个新数组时,我使用这个符号
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()。
在 javascript 中,您应该尽可能使用文字。
var a = [];
代替var o = new Array();
var o = {};
代替var o = new Object();
同样,不要做new String("abc");
, new Number(1);
, 等等。
JavaScript 是一种原型语言,而不是像 C# 这样的经典语言。尽管 JavaScript 确实有一个看起来很像 C# 的 new 运算符,但您不应该使用它来创建新对象或数组。
//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 = [];
使用这种模式,你实际上有很多使用对象文字和数组初始化语法的表达能力。
//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 关键字。他们所做的只是增加额外的膨胀并减慢速度。
使用 new 关键字的唯一真正原因是,如果您正在创建一个新对象并且希望它使用您定义的构造函数。有关此主题的更多信息,您可以查看 Douglas Crockford 题为 JavaScript, We Hardly new Ya的文章。