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

关于configurable 、enumerable 、 writable 疑问

关于configurable 、enumerable 、 writable 疑问

慕姐8259394 2017-09-12 23:03:30
var s={a:1};Object.defineProperty(s,"a",{value:2});s.a;//2Object.getOwnPropertyDescriptor(s,"a");//configurable: true enumerable: true value: 2 writable: true用var s={a:1};定义一个属性的值,属性的标签默认为true,但是用Object.defineProperty(s,"a",{value:2});定义一个属性的值,属性的标签在没有写的情况下应该是默认为false,按照以上顺序写的代码,属性的三个标签值应该被覆盖成fasle才对,为什么最后还会输出configurable: true enumerable: true  writable: true呢
查看完整描述

1 回答

?
橋本奈奈未

TA贡献436条经验 获得超108个赞

//img1.sycdn.imooc.com//59bb285f0001292213650753.jpg

我这边是没问题的,你清下浏览器缓存呢?

查看完整回答
反对 回复 2017-09-15
  • 慕姐8259394
    慕姐8259394
    嗯好的,谢谢你了,我清一下,一样的代码今晚又可以了
  • 橋本奈奈未
    橋本奈奈未
    也许就是缓存的原因吧,再多试几次,调试代码的时候可以把开发者工具的disable cache勾上,避免缓存带来不必要的干扰
?
慕姐8259394

TA贡献2条经验 获得超0个赞

//img1.sycdn.imooc.com//59ba91060001602810290140.jpg

我设置断点一步一步执行然后看它的输出

查看完整回答
反对 回复 2017-09-14
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

不知道你watch的是哪个。你还是console.log打印出来比较清楚。应该是不会变的//img1.sycdn.imooc.com//59b9fb6c0001c13e13530801.jpg

查看完整回答
反对 回复 2017-09-14
  • 慕姐8259394
    慕姐8259394
    麻烦看一下我上面那个截图,我就是设置断点一步一步执行看到它值输出为90
  • 慕姐8259394
    慕姐8259394
    var person={}; Object.defineProperty(person,"name",{value:"34",configurable:true,writable:false}); Object.getOwnPropertyDescriptor(person,"name");//输出 person.name="90"; console.log(person.name);//输出90 我刚刚把name改成name1后再刷新一次就正常了,但是我再加上 Object.defineProperty(person,"name1",{value:"momo"}); delete person.name1; 这两句接在后面,它多执行几次出来的结果就是可以直接赋值的,就算我屏蔽了这两句再刷新也没有办法恢复正常,想了一下我昨天也是这个顺序操作的。而且每次出来的结果不一样有时候直接赋值成功有时候直接赋值不成功,比较诡异
  • 1 回答
  • 0 关注
  • 2460 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信