JavaScript 中的稀疏数组
JavaScript 中的一个常见误解是假设数组是连续的,这意味着它们包含索引 0 中的所有元素到目前的长度。然而,事实并非如此:JavaScript 数组是稀疏的。
当使用大于当前长度的索引访问或设置元素时,会创建一个空槽并将数组扩展到适当的位置尺寸。例如,如果使用 array[Date.getTime()] 设置一个值,则该数组将扩展为包含从索引 0 到当前时间的空槽,即使这些槽不会被使用。
哈希表实现
稀疏数组在内部实现为哈希表。键可以是整数、字符串、浮点数或其他对象,在添加到哈希之前,会使用 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)); }
此代码将显示:
array[0] = zero, typeof(0) == string array[1254503972355] = now, typeof(1254503972355) == string array[3.14] = pi, typeof(3.14) == string
for...in 语法迭代定义的索引,演示当访问或设置具有非顺序索引的元素时,数组会使用空槽进行扩展。
浏览器差异
不同的浏览器以类似的方式处理稀疏数组,作为哈希表实现的数组。但是,在处理非常大的索引时,考虑使用稀疏数组非常重要,因为这会影响内存消耗和性能。
以上是JavaScript 数组真的是连续的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!