Javascript 数组真的是密集的吗?
问题出现了:Javascript 数组真的是密集数据结构吗?如果尝试使用大整数索引访问数组元素,如下面的代码片段所示:
array[Date.getTime()] = value;
解释器是否会实例化从索引 0 到当前时间的所有数组元素?此外,不同浏览器之间的行为是否存在差异?
深入研究实现
为了阐明这个问题,有必要了解 Javascript 数组的内部工作原理。与数组作为密集结构的传统印象相反,Javascript 数组被实现为哈希表,采用键值对进行数据存储。这种设计选择允许索引的灵活性,不仅可以使用大整数,还可以使用字符串、浮点数,甚至任意对象作为有效索引。
但是,需要注意的是自动转换在插入哈希之前,使用 toString() 方法将所有键转换为字符串。为了演示这种行为,请考虑以下代码:
var array = []; array[0] = "zero"; array[new Date().getTime()] = "now"; array[3.14] = "pi"; for (var i in array) { alert("array["+i+"] = " + array[i] + ", typeof("+i+") == " + typeof(i)); }
此代码的输出揭示了 Javascript 数组的令人惊讶的本质:
array[0] = zero, typeof(0) == string array[1254503972355] = now, typeof(1254503972355) == string array[3.14] = pi, typeof(3.14) == string
注意所有索引(0、当前时间和 3.14) 到字符串,然后将它们存储到哈希表中。这种行为强调了 Javascript 数组和传统密集数据结构之间的根本区别,其中元素访问受到顺序索引的限制。
数组迭代的含义
至关重要在迭代 Javascript 数组时了解这些索引特征。虽然常见的做法是使用 for (var i = 0; i
以上是Javascript 数组真的很密集吗?的详细内容。更多信息请关注PHP中文网其他相关文章!