我想知道像
但是为什么我们被允许做上述的事情呢?为什么有人想要创建一个默认长度为20的数组(就像第一个例子中那样)?为什么有人想要修改和破坏数组的length属性(就像第二个例子中那样)?为什么有人会做像[ , , , ]这样的事情?为什么你会使用delete而不是仅仅从数组中删除元素?能否提供一些使用这些语句的用例? 我已经搜索了大约3个小时,但没有找到答案。大多数来源(2ality博客,JavaScript:权威指南第6版以及在Google搜索结果中出现的其他文章,例如“JavaScript稀疏数组”)都说稀疏数组是奇怪的行为,应该避免使用它们。我读过的所有来源都没有解释,或者至少试图解释,为什么我们首先被允许创建稀疏数组。除了《你不知道的JavaScript:类型与语法》,这本书讲解了JavaScript为什么允许创建稀疏数组:
一个数组有长度属性但没有明确值的插槽,这是JS中一种奇怪的外来数据结构,具有一些非常奇怪和令人困惑的行为。创建这样一个值的能力纯粹来自于旧的、已弃用的历史功能("类似数组的对象",如arguments对象)。
因此,该书暗示arguments对象以某种方式使用我上面列出的示例之一来创建稀疏数组。那么,arguments在何处和如何使用稀疏数组?
还有一个让我感到困惑的地方就是书中的这部分内容:“JavaScript:The Definitive Guide 6th Edition”的这句话:“足够稀疏的数组通常以比密集数组更慢、更节省内存的方式实现”。在稀疏数组的上下文中,“更节省内存”看起来像是“更慢”的矛盾之处,那么两者之间的区别是什么?这里是该书特定部分的链接。
var foo = new Array(20)
,var foo = [1,2,3]; foo.length = 10
或者 var foo = [,,,]
这样的代码用途是什么(另外,为什么要使用 delete
操作符而不是从数组中直接删除元素)。正如您可能已经知道的那样,所有这些都会导致稀疏数组。但是为什么我们被允许做上述的事情呢?为什么有人想要创建一个默认长度为20的数组(就像第一个例子中那样)?为什么有人想要修改和破坏数组的length属性(就像第二个例子中那样)?为什么有人会做像[ , , , ]这样的事情?为什么你会使用delete而不是仅仅从数组中删除元素?能否提供一些使用这些语句的用例? 我已经搜索了大约3个小时,但没有找到答案。大多数来源(2ality博客,JavaScript:权威指南第6版以及在Google搜索结果中出现的其他文章,例如“JavaScript稀疏数组”)都说稀疏数组是奇怪的行为,应该避免使用它们。我读过的所有来源都没有解释,或者至少试图解释,为什么我们首先被允许创建稀疏数组。除了《你不知道的JavaScript:类型与语法》,这本书讲解了JavaScript为什么允许创建稀疏数组:
一个数组有长度属性但没有明确值的插槽,这是JS中一种奇怪的外来数据结构,具有一些非常奇怪和令人困惑的行为。创建这样一个值的能力纯粹来自于旧的、已弃用的历史功能("类似数组的对象",如arguments对象)。
因此,该书暗示arguments对象以某种方式使用我上面列出的示例之一来创建稀疏数组。那么,arguments在何处和如何使用稀疏数组?
还有一个让我感到困惑的地方就是书中的这部分内容:“JavaScript:The Definitive Guide 6th Edition”的这句话:“足够稀疏的数组通常以比密集数组更慢、更节省内存的方式实现”。在稀疏数组的上下文中,“更节省内存”看起来像是“更慢”的矛盾之处,那么两者之间的区别是什么?这里是该书特定部分的链接。