属性 描述符对象存储在哪里?

Where are property descriptor objects stored?

我知道你可以获得一个属性描述符对象 某个对象的某个 属性 'prop' objObject.getOwnPropertyDescriptor(obj,"prop");。 我只是想知道:这些对象存储在哪里? 它们是存储在对象内部还是……其他地方? 我试图在开发人员工具中找到它们,但没有成功。

属性 除非明确请求,否则描述符对象不存在。它们是在您 call Object.getOwnPropertyDescriptor 时创建的 ad-hoc。 所以下面的代码:

var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');

始终计算为 false。

正如我们所见(代码和规范),属性 描述符对象未存储,而是按需创建。

那么 writableconfigurablevaluegetset... 属性存储在哪里?规范不要求它们暴露给用户代码... Here is C++ definition for V8 PropertyDescriptor class - 似乎每个 属性 占用一个字节。

如果您想检查 属性 是否可写、可配置或类似,Firefox 控制台允许您这样做(但前提是 属性 不可写或具有 getter/setter ):