我正试图了解JavaScript的见解,目前正在学习它。
在数组中,我一直在读到以下是反模式:
var a = new Array("a", "b", "c");
以及以下内容不是:
var a = ["a", "b", "c"];
我经常在理解javascript时遇到困难,因为我很想与c#进行类比,但我不应该这样做!你能解释一下这是为什么吗?
答案 0 :(得分:10)
至少有三个原因让人们认为你应该使用文字语法([...]
)而不是数组构造函数:
符号Array
可以被遮蔽(有人可以在给定范围内赋予它不同的含义),文字不能。
文字较短,有些人会争辩,更清楚。
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(一个参数)中定义。
* “......一个length
为10”的空数组这可能看起来像一个奇怪的句子 - 它怎么可能是空的并且有一个length
的10? - 但这就是JavaScript的“数组”的工作方式。你可以说他们是稀疏的数组。或者你可以说they aren't really arrays。 (标准Array
也是如此;新的类型数组,Int32Array
等都是真正的数组。)