在Javascript中声明数组时,应遵循哪一种最佳实践
Which one is the best practice to follow when declaring an array in Javascript?
可能重复:
用{}或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。
- 在Javascript中声明数组时,应遵循哪一种最佳实践
- 3种方式说如果:否则,但哪一种
- 哪一种是最快的方法
- 两者中的哪一种是最有效的方法
- 在Javascript中将字符串文本提取为常量是一种最佳实践吗
- 如果一个函数的大部分执行是以输入为条件的,那么下面哪一种是更好的实现方式
- 区分鼠标左键和右键的不同方式,要用哪一种
- 给定一个特定的日期,是否有一种方法可以在不知道日期是以哪种格式书写的情况下在自由文本文档中搜索该日期?
- 哪一种浏览速度更快?从不同的网站下载不同的图片/一个网站为一个网页's图片[HTML/PHP]
- 哪一种方法更快?条件IF或数学公式
- 为什么有两种不同的角函数包装方法,哪一种最好?
- 哪一种是在javascript中复制对象的更好方法?
- 是否有一种方法来确定JS代码的哪一部分是最耗电的
- 哪一种技术可以隐藏内容较重的右栏?
- 哪一种是自定义的,通过书本的方式获取用户的本地时间/时区?(或者:谷歌/脸书是怎么做到的?)
- Angularjs基于哪种设计模式?,学习一种设计模式就足够了
- 这两种方法中哪一种更有效
- 哪一种编程语言具有Gnome 3的完整实现API(绑定)
- Javascript:将关联数组转换为字符串的最佳方式,稍后再转换成另一种方式
- 哪一种定义变量的方法更好?为什么?