我对无类型的javascript数组的性能特征感到好奇,因为它们不是同质的,并且想知道如何在内部进行处理。例如,如果我在数组中有一个数字和一些任意对象,它们是否连续存储在内存中?是否将所有原语都装箱,并且数组仅包含指向所有内容的指针?它是VM的实现细节吗?
2 回答

POPMUISE
TA贡献1765条经验 获得超5个赞
这取决于JavaScript引擎的实现。
但通常在JavaScript数组中,整数和浮点数是按值存储的,而所有其他对象都是按引用存储的。
在V8中,数组类型将为PACKED_ELEMENTS
或HOLEY_ELEMENTS
(取决于创建/填充数组的方式),并且每个字符串还将另外存储在堆中。
要进行验证,请%DebugPrint
在V8引擎的调试版本中使用该功能(您可以使用jsvu
工具获得一个):
d8> var a = [1, 2, 'aaa']; %DebugPrint(a);
DebugPrint: 000003B13FECFC89: [JSArray]
- elements: 0x03b13fecfc31 <FixedArray[3]> {
0: 1
1: 2
2: 0x00c73b3e0fe1 <String[#3]: aaa>
}
添加回答
举报
0/150
提交
取消