首页 > 解决方案 > 如何在 V8 中检测从一种形状到另一种形状的过渡?

问题描述

假设我有下一个代码:

let x = null;
x = 10;

我如何在这里检测形状过渡?从 NULL_TYPE 到 SMI ?我知道应该有一些内置功能。是清单。

我希望它可以node --allow-natives-syntax像那样运行或smth,例如:


let x = null;
x = 10;
console.log(%DetectTransition(x))

标签: javascriptv8

解决方案


(这里是 V8 开发人员。)

该代码片段中没有形状转换,因为“形状”概念仅适用于对象。

这是一个形状转换的例子:

let a = {x: 1};
let b = {x: 1};
%HaveSameMap(a, b);  // true
b.y = 2;
%HaveSameMap(a, b);  // false
a.y = 3;
%HaveSameMap(a, b);  // true

%HaveSameMap比较所提供对象的形状描述符并返回trueor false。有关更多详细信息,您还可以%DebugPrint按照@JonasWilms 的建议使用。

当然,我们在这里讨论的是内部细节(包括幕后发生的事情,以及如何检查它以进行调试或好奇)。没有人承诺事情将继续以这种方式进行。(我认为基础不太可能改变,但细节确实会改变。)


推荐阅读