在Javascript中声明数组时,哪一个是最佳实践?

时间:2012-07-30 06:18:37

标签: javascript arrays web-applications

  

可能重复:
  Create an empty object in JavaScript with {} or new Object()?

当我想声明一个新数组时,我使用这种表示法

var arr = new Array();

但是当在线测试时,例如在jsbin上,警告会向我发出“使用数组文字符号[]。”

我没有找到避免使用构造函数的理由。在某种程度上比使用[]效率低吗?或者这是不好的做法?

是否有充分理由使用var arr = [];代替var arr = new Array();

5 个答案:

答案 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)

建议的做法是使用

var arr = [];

已经回答here

答案 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