Javascript 数组的稀疏性质
在 Javascript 中,数组本质上是稀疏的,这意味着它们不会自动为 0 之间的所有元素分配内存和当前索引。相反,元素仅在访问或分配时才分配。
例如,考虑以下代码,其中我们将当前时间的元素设置为索引:
array[Date.getTime()] = value;
相反正如您所期望的,这不会导致解释器分配从 0 到当前时刻的所有元素。相反,它只分配访问的特定元素。
哈希表实现
Javascript 数组在内部实现为哈希表。这意味着键(索引)不仅可以是整数,还可以是字符串、浮点数或对象。插入哈希表后,所有键都会使用 toString() 方法转换为字符串。
验证码
您可以通过以下测试验证这种稀疏性质代码:
var array = []; array[0] = "zero"; array[new Date().getTime()] = "now"; array[3.14] = "pi"; for (var i in array) { console.log("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
这表明非整数索引也可以在不分配中间元素的情况下工作。但是,请注意,使用 i 范围从 0 到 array.length 的传统 for 循环可能会导致非标准数组索引问题。
以上是JavaScript 数组是真正密集的,还是表现出稀疏行为?的详细内容。更多信息请关注PHP中文网其他相关文章!