慕妹3146593
MDN :如果对象中不存在指定的属性,Object.defineProperty()就创建这个属性。当描述符中省略某些字段时,这些字段将使用它们的默认值。拥有布尔值的字段的默认值都是false。意思是,如果你通过Object.defineProperty()创建新属性,省略描述符的某些字段,如果值为布尔型,则为 false;Reflect.getOwnPropertyDescriptor(Object.defineProperty({}, 'key', {value:1}),'key')//{value: 1, writable: false, enumerable: false, configurable: false}如果你不通过 Object.defineProperty() 创建新的属性,而是通过对象字面量创建属性,默认值为 true ,高程说的没问题;Reflect.getOwnPropertyDescriptor({key:1},'key')//{value: 1, writable: true, enumerable: true, configurable: true}let o={};o.key=1;Reflect.getOwnPropertyDescriptor(o,'key')//同上另外,底层操作现在可以转移到 Reflect 对象上来操作;