- 使用{}和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 的时候就不可以修改了.