猿问

Object.defineProperty()属性描述符的默认值?

《JS高程第三版》第六章关于对象属性那部分,提到的属性的几个特征,无论是数据属性还是访问器属性,他们的默认值都是true
比如
[[configurable]][[enumerable]]等等这些的默认值书上写的是true
但是 在MDN上面的说法却是false 所以
我有点晕 
MDN:
https://developer.mozilla.org...

holdtom
浏览 844回答 2
2回答

慕妹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 对象上来操作;

波斯汪

你这个MDN的文档,是讲Object.defineProperty的api,默认为false。比如var obj = {};Object.defineProperty(obj, 'a', { value: 20 });obj.value; // 20obj.value = 15;obj.value; // 20Object.keys(obj); // []使用这个api,没有configurable和enumerable时,这两个参数默认值是false。而高程上面讲的是一个对象属性的默认值,类似于这种。var obj = {  a: 20,};这个a属性是可枚举的可修改的
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答