2 回答

TA贡献1820条经验 获得超9个赞
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 对象上来操作;

TA贡献1811条经验 获得超4个赞
你这个MDN的文档,是讲Object.defineProperty的api,默认为false。
比如
var obj = {};
Object.defineProperty(obj, 'a', { value: 20 });
obj.value; // 20
obj.value = 15;
obj.value; // 20
Object.keys(obj); // []
使用这个api,没有configurable和enumerable时,这两个参数默认值是false。
而高程上面讲的是一个对象属性的默认值,类似于这种。
var obj = {
a: 20,
};
这个a属性是可枚举的可修改的
添加回答
举报