在Javascript中声明数组时,最好遵循哪种做法?

在Javascript中声明数组时,最好遵循哪种做法?,javascript,arrays,web-applications,Javascript,Arrays,Web Applications,可能重复: 当我想要声明一个新数组时,我使用这个符号 var arr = new Array(); 但是当在线测试时,例如在jsbin上,一个警告提示我“使用数组文字符号[]” 我没有找到避免使用构造函数的理由。在某些方面比使用[]效率低吗?还是不好的做法 是否有充分的理由使用var arr=[]而不是var arr=new Array()?建议使用 var arr = []; 已回答的[]是: 短的 清晰的 不受新数组(3)和新数组(3,3)完全不同的影响 无法重写 示例代码: va

可能重复:

当我想要声明一个新数组时,我使用这个符号

var arr = new Array();
但是当在线测试时,例如在jsbin上,一个警告提示我“使用数组文字符号[]”

我没有找到避免使用构造函数的理由。在某些方面比使用
[]
效率低吗?还是不好的做法


是否有充分的理由使用
var arr=[]而不是
var arr=new Array()

建议使用

var arr = [];
已回答的

[]
是:

  • 短的
  • 清晰的
  • 不受
    新数组(3)
    新数组(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=[]
是因为这样说

他的原因包括new Array()的非直观和不一致行为:

请注意,使用
new Array()
无法创建只包含一个预先指定的数字元素的数组

使用[]实际上更高效,也更安全!可以覆盖数组构造函数并使其执行奇怪的操作,但不能覆盖[]的行为


就我个人而言,我总是使用[]语法,同样总是使用{}语法代替new Object()

var a=[]而不是
var o=new Array()

var o={}而不是
var o=new Object()


同样,不要做
新字符串(“abc”)
新编号(1)
//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关键字用于Boolean、Number、String或Function。他们所做的只是增加额外的膨胀并减缓速度


使用new关键字的唯一真正原因是,您正在创建一个新对象,并且希望它使用您定义的构造函数。有关此主题的更多信息,请查看道格拉斯·克罗克福德(Douglas Crockford)题为“JavaScript”的帖子。

好答案。顺便说一句,我想知道为什么你认为新数组(3)和新数组(3,3)是冲突的?它们执行完全不同的初始化。
[]
也在许多浏览器上。@AshwinPrabhu-我的观点是它们执行完全不同的初始化。它要求维护人员知道,添加第二个参数会改变第一个参数的含义。该人要求解释为什么这样更好。如果没有办法[…]创建一个只包含一个预先指定的数字元素的数组,那是什么意思?他的意思是不能使用新数组(123)创建数组[123]因为它会创建给定大小的预定义数组。
//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"];