【问题标题】:Which one is the best practice to follow when declaring an array in Javascript? [duplicate]在 Javascript 中声明数组时,最好遵循哪一个? [复制]
【发布时间】:2012-07-27 19:29:24
【问题描述】:

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

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

var arr = new Array();

但是当在线测试时,例如在 jsbin 上,一个警告提示我“使用数组文字符号 []。”

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

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

【问题讨论】:

    标签: javascript arrays web-applications


    【解决方案1】:

    [] 是:

    • 更短
    • 更清晰
    • 不受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 个警报!

    【讨论】:

    • 好答案。顺便说一句,我很想知道您为什么认为 new Array(3) 和 new Array(3,3) 有冲突?它们执行完全不同的初始化。
    • [] 在许多浏览器上也是faster
    • @AshwinPrabhu — 他们进行完全不同的初始化是我的观点。它要求维护者知道添加第二个参数会改变第一个参数的含义。
    【解决方案2】:

    大多数情况下,人们使用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()。

    【讨论】:

    • 没有办法 [...] 创建一个只有一个预先指定的数字元素的数组是什么意思
    • 他的意思是你不能使用 new Array(123) 创建一个数组 [123],因为它会创建一个给定大小的预定义数组。
    【解决方案3】:

    推荐的做法是使用

    var arr = [];
    

    已经回复here

    【讨论】:

    • 男人问为什么这样更好。
    【解决方案4】:

    在 javascript 中,您应该尽可能使用字面量。

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

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

    同样,不要使用new String("abc");new Number(1); 等。

    【讨论】:

      【解决方案5】:

      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 的帖子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 2012-04-01
        相关资源
        最近更新 更多