对象

  • 使用{}和defineProperty默认属性是不一样的;
    var obj={a:1}
    Object.getOwnPropertyDescriptor(obj,'a') 
    //{value: 1, writable: true, enumerable: true, configurable: true}
    Object.defineProperty(obj,'b',{value:2})
    Object.getOwnPropertyDescriptor(obj,'b')
    //{value: 2, writable: false, enumerable: false, configurable: false}
    obj.c=123
    Object.getOwnPropertyDescriptor(obj,'c');
    //{value: 123, writable: true, enumerable: true, configurable: true}
    
  • [[Writable]]为false时不能修改属性的值;[[Enumerable]]为false时, for-in循环遍历不到此属性, 但是,使用 Object.getOwnPropertyNames方法仍然可以获取; [[Configurable]]属性为 false时不能使用 defineProperty 方法修改属性的特性 。 当[[Writable]]为false而[[Configurable]]为true时,我们还可以使用 defineProperty 法修改属性的值, 但是[[Configurable]]为 false 的时候就不可以修改了.