胡說(shuō)叔叔
2021-04-29 13:28:31
我對(duì)無(wú)類型的javascript數(shù)組的性能特征感到好奇,因?yàn)樗鼈儾皇峭|(zhì)的,并且想知道如何在內(nèi)部進(jìn)行處理。例如,如果我在數(shù)組中有一個(gè)數(shù)字和一些任意對(duì)象,它們是否連續(xù)存儲(chǔ)在內(nèi)存中?是否將所有原語(yǔ)都裝箱,并且數(shù)組僅包含指向所有內(nèi)容的指針?它是VM的實(shí)現(xiàn)細(xì)節(jié)嗎?
2 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
這取決于JavaScript引擎的實(shí)現(xiàn)。
但通常在JavaScript數(shù)組中,整數(shù)和浮點(diǎn)數(shù)是按值存儲(chǔ)的,而所有其他對(duì)象都是按引用存儲(chǔ)的。
在V8中,數(shù)組類型將為PACKED_ELEMENTS
或HOLEY_ELEMENTS
(取決于創(chuàng)建/填充數(shù)組的方式),并且每個(gè)字符串還將另外存儲(chǔ)在堆中。
要進(jìn)行驗(yàn)證,請(qǐng)%DebugPrint
在V8引擎的調(diào)試版本中使用該功能(您可以使用jsvu
工具獲得一個(gè)):
d8> var a = [1, 2, 'aaa']; %DebugPrint(a);
DebugPrint: 000003B13FECFC89: [JSArray]
- elements: 0x03b13fecfc31 <FixedArray[3]> {
0: 1
1: 2
2: 0x00c73b3e0fe1 <String[#3]: aaa>
}
添加回答
舉報(bào)
0/150
提交
取消