Javascript:数组反模式

时间:2013-10-30 08:18:46

标签: javascript arrays anti-patterns

我正试图了解JavaScript的见解,目前正在学习它。

在数组中,我一直在读到以下是反模式:

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

以及以下内容不是:

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

我经常在理解时遇到困难,因为我很想与进行类比,但我不应该这样做!你能解释一下这是为什么吗?

1 个答案:

答案 0 :(得分:10)

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

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

  2. 文字较短,有些人会争辩,更清楚。

  3. Array构造函数有一个有趣的API:如果你只给它一个参数,并且该参数是一个整数,而不是将该参数用作数组element,它用它来设置length。但是如果你给它两个或多个参数,它会将它们用作数组条目。因此new Array(10)创建一个空数组,其length为10 *,但new Array(10, 20)创建一个包含两个条目的数组。更糟糕的是,a = new Array("10")创建了一个包含一个条目("10")的数组,因为它是一个字符串,而不是一个数字。此变量API在规范中的§15.4.2.1(2+个参数)和§15.4.2.2(一个参数)中定义。


  4. * “......一个length为10”的空数组这可能看起来像一个奇怪的句子 - 它怎么可能是空的并且有一个length的10? - 但这就是JavaScript的“数组”的工作方式。你可以说他们是稀疏的数组。或者你可以说they aren't really arrays。 (标准Array也是如此;新的类型数组,Int32Array等都是真正的数组。)