我试图让自己了解 JavaScript,目前正在学习它。
在数组中,我一直在阅读以下内容是一种反模式:
var a = new Array("a", "b", "c");
以下不是:
var a = ["a", "b", "c"];
我经常很难理解javascript,因为我很想用c#进行类比,但我不应该!你能解释一下为什么会这样吗?
我试图让自己了解 JavaScript,目前正在学习它。
在数组中,我一直在阅读以下内容是一种反模式:
var a = new Array("a", "b", "c");
以下不是:
var a = ["a", "b", "c"];
我经常很难理解javascript,因为我很想用c#进行类比,但我不应该!你能解释一下为什么会这样吗?
人们认为应该使用文字语法 ( [...]
) 而不是数组构造函数,至少有三个原因:
符号Array
可以被遮蔽(有人可以在给定范围内赋予它不同的含义),文字不能。
文字更短,有些人会说,更清晰。
构造Array
函数有一个有趣的 API:
如果你只给它一个论点,那么
length
。因此new Array(10)
创建了一个 a 为 10 的空数组length
。¹new Array("10")
创建一个包含一个元素 ( ) 的数组,"10"
因为"10"
它不是数字。new Array(1.1)
以“无效的数组长度”或类似的方式失败。如果你给它多个参数,它会创建一个包含那么多元素的数组(即使第一个参数是一个整数)。因此创建一个包含两个元素 (和)new Array(10, 20)
的数组。10
20
这个不同的 API 在规范的这一部分中定义。
¹ "...alength
为 10 的空数组"这可能看起来是一个奇怪的句子——它怎么可能是空的并且 alength
为 10?!——但这就是 JavaScript 的“数组”的工作方式。你可以说它们是稀疏数组。或者你可以说它们根本不是真正的数组。(标准也是如此Array
;新类型的数组Int32Array
等是真正的数组。)