Chrome DevTools 控制台打印出来的双中括号属性是什么?
先来看一段代码在 Chrome DevTools 控制台的展开效果:
new Promise((resolve, reject) => {})
直接上答案,这个就是 JS 的内部属性,其概念和形式在 ECMA规范 8.6.2 Object Internal Properties and Methods 有定义,但不是规范的一部分:
原文:These internal properties are not part of the ECMAScript language. They are defined by this specification purely for expository purposes.
翻译:这些内部属性(internal properties)不属于 ECMAScript 语言。本规范定义这些内部属性,纯粹是为了方便说明。
原文:The names of internal properties are enclosed in double square brackets [[ ]].
翻译:内部属性的名称用双中括号 [[]] 括起来。
表格8汇总了对所有 ECMAScript 对象可用的内部属性,如 [[Prototype]],具体可查阅文档。
就这么简单。
我怎么读取这些内容属性呢?
没有统一方法读取。有些私有属性如 [[Prototype]] 可以读取,就是 .__proto__ 属性。这个属性不是规范。规范使用 getPrototypeOf :
Object.getPrototypeOf({}) === ({}).__proto__; // true
Reflect.getPrototypeOf({}) === ({}).__proto__; // true