在Javascript中声明数组时,应遵循哪一种最佳实践

Which one is the best practice to follow when declaring an array in Javascript?

本文关键字:哪一种 最佳 Javascript 声明 数组      更新时间:2024-05-10

可能重复:
用{}或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。