1

我试图让自己了解 JavaScript,目前正在学习它。

在数组中,我一直在阅读以下内容是一种反模式:

var a = new Array("a", "b", "c");

以下不是:

var a = ["a", "b", "c"];

我经常很难理解,因为我很想用进行类比,但我不应该!你能解释一下为什么会这样吗?

4

1 回答 1

11

人们认为应该使用文字语法 ( [...]) 而不是数组构造函数,至少有三个原因:

  1. 符号Array可以被遮蔽(有人可以在给定范围内赋予它不同的含义),文字不能。

  2. 文字更短,有些人会说,更清晰。

  3. 构造Array函数有一个有趣的 API:

    • 如果你只给它一个论点,那么

      • 如果该参数是一个整数,它使用该参数来设置length。因此new Array(10)创建了一个 a 为 10 的空数组length。¹
      • 如果参数不是数字,它将使用该参数作为数组中的唯一元素。因此new Array("10")创建一个包含一个元素 ( ) 的数组,"10"因为"10"它不是数字。
      • 如果参数是小数,则为错误。因此new Array(1.1)以“无效的数组长度”或类似的方式失败。
    • 如果你给它多个参数,它会创建一个包含那么多元素的数组(即使第一个参数是一个整数)。因此创建一个包含两个元素 (和)new Array(10, 20)的数组。1020

这个不同的 API 在规范的这一部分中定义。


¹ "...alength为 10 的空数组"这可能看起来是一个奇怪的句子——它怎么可能是空的并且 alength为 10?!——但这就是 JavaScript 的“数组”的工作方式。你可以说它们是稀疏数组。或者你可以说它们根本不是真正的数组。(标准也是如此Array;新类型的数组Int32Array等是真正的数组。)

于 2013-10-30T08:22:17.357 回答