如何构建Javascript的稀疏数组?每个索引中放置了什么?

时间:2015-11-16 21:01:57

标签: javascript v8

我知道这个问题没有实际用法,但我已经阅读了许多稀疏数组的不同定义,我想知道这些动态数组如何创建的确切低级实现。

稀疏数组是指针数组吗?或者它是某种Struct节点的数组?或者它是一些通用的大空间,可以填充像Char一样小的东西,或像浮子一样大的东西?

1 个答案:

答案 0 :(得分:2)

如果数组仅略微稀疏,则后备数组是连续的,其中空洞索引具有the_hole值。当用户取消引用时,the_hole值将转换为undefined。具有the_hole值的索引也不会通过Object.keys等方法报告为数组中存在的索引。

如果数组更稀疏,它只是一个数字作为键的哈希表。

与注释中所说的不同,数组总是被假定为非稀疏的,并且只作为最后的手段而不是相反的方式转换为哈希表。当你为数组索引定义一个自定义属性描述符(从来没有这样做)或使数组太稀疏时会发生这种情况。