【问题标题】:whats the difference between these methods of defining arrays in javascript? [duplicate]这些在javascript中定义数组的方法有什么区别? [复制]
【发布时间】:2011-03-21 20:46:36
【问题描述】:

可能重复:
What’s the difference between “Array()” and “[]” while declaring a JavaScript array?

这两种在javascript中定义数组的方法有什么区别?

var arrayList = []

var arrayListAgain = new Array();

【问题讨论】:

  • 一个漂亮,一个丑。一个是数组字面量,一个是创建一个新的 Array 对象。他们几乎做同样的事情......我从未见过new Array(countOfUndefinedElements); 的用途,但我想会有一些。
  • 使用字面量初始化 [] 的速度要快得多;)

标签: javascript


【解决方案1】:

它们是一样的。根据http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

当前的最佳实践避开了 Javascript 上的“新”关键字 原语。如果你想创建一个 new Array 只需使用括号 [] 之类的 这……var myArray = [];

我建议阅读该页面,它包含很多关于数组和 JS 的有用信息。

【讨论】:

    【解决方案2】:

    您可以使用第二个来定义一个预定义长度的数组,例如

    var arrayListAgain = new Array(20);
    

    将创建一个包含 20 个(未定义)元素的数组。

    另见new Array (len)

    【讨论】:

      【解决方案3】:

      从来没有。两者都创建了一个 Array 对象的新实例。

      Douglas Crockford 在 'Javascript the good parts' 中推荐前一种方法,因为它更简洁。

      【讨论】:

      • Crockford 也不鼓励使用 ++--,原因不明......
      【解决方案4】:

      一个好一个坏:-)

      不认真,第一种方式更短(通过线路发送的字节更少)并且它没有任何奇怪的潜在问题。但是,第二个可以正常工作。

      new Array() 的奇怪之处在于:如果您将 one 数字参数传递给构造函数,则表示“初始化数组以便有给定数量的空 (@ 987654323@) 数组元素,因此length 等于给定的数字。” (实际上它必须是一个整数。)如果你传递一个非数字,或者两个或多个数字,这意味着,“初始化数组,使其内容反映这个参数列表。”

      好的,现在我说有一个奇怪的部分,就是这样:如果您使用某种服务器端框架,并且您想要创建一个数值数组(整数值),例如唯一的数据库键,那么你可能会想这样做:

      var keys = new Array();

      (当然,这种语法是我编出来的。)现在,如果您的服务器端键列表中只有一个“id”会发生什么?

      【讨论】:

      • 是的,不要过度使用电线!
      • .. 那么哪个好哪个坏?看来你都称赞了...
      • 我在开玩笑说“坏”部分,但我认为第一个符号 ([]) 更可取,因为它不那么古怪。
      • 它是一个 unsigned 整数,更准确地说,请参阅ECMAScript spec:“如果参数 len 是一个数字和 ToUint32 (len) 等于len,则新建对象的length属性设置为ToUint32(len)。如果参数 len 是 Number 并且 ToUint32(len) 不等于 len,则会出现 RangeError 异常扔了。”
      • 是的,前几天我在 kangax 的博客上读到了这句话——完全正确。我从不使用new Array() 表单,所以我不会想太多:-)
      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2016-09-26
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多