为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
慕妹3146593

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


查看完整回答
反对 回复 2019-03-23
?
波斯汪

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属性是可枚举的可修改的


查看完整回答
反对 回复 2019-03-23
  • 2 回答
  • 0 关注
  • 843 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号