谁能解释V8字节码LdaTheHole?

问题描述 投票:2回答:2

我知道V8字节码“ LdaUndefined”将常量“ undefined”加载到累加器寄存器中。那“ LdaTheHole”会加载到累加器中呢?也许是“ TheHole”?“ TheHole”是什么意思?谢谢。

javascript node.js v8
2个回答
0
投票

我通过v8 / Chromium代码进行了Google搜索,结果显示TheHole是未分配值的前哨值。在JavaScript中的许多情况下,未分配的值将被视为undefined(例如,在访问尚未分配的数组元素或已声明但从未分配的var时)。

但是偶尔,解释器需要区分何时存在[[无值

和何时将某些内容设置为未定义。这是之间的区别:var a = [1,2]; console.log(a[2]);

var a = [1,2,3]; delete a[2]; console.log(a[2]);

[在两种情况下,访问a [2]都将返回“ undefined”,但是在第二种情况下,该阵列的后备存储(原始存储器)的末尾有一个“ hole”,这意味着如果您以后分配了一个再次将value设为a [2],则无需先将值复制到更大的数组中。因此,TheHole是“那里没有”的值。您不能为此使用undefined,因为可以将数组元素的值显式设置为undefined

真正重要的地方是诸如Array.splice之类的操作,或任何搜索数组的内容。如果您广泛地在线修改数组的内容,则您不希望每个操作都需要内存分配和释放,因为这些操作很慢。

因此,LdaTheHole用于在搜索数组之前初始化变量,或“清除”已删除的数组值。


0
投票
(这里是V8开发人员。)
© www.soinside.com 2019 - 2024. All rights reserved.