var a=10;console.log(Object.getOwnPropertyDescriptor(window,'a'));

configurable 是否可删除
enumerable 是否可遍历
writable 是否可修改
使用属性描述符setter、getter
1、只定义getter函数 静默失败,严格模式会报错2、只定义setter函数 获取属性值为undefinedvar obj={a: 22,get bb(){return this.a},set bb(val){this.a=val*2}}console.log(Object.getOwnPropertyDescriptor(obj,'a'))console.log(Object.getOwnPropertyDescriptor(obj,'bb'))console.log(obj)

Object.isExtensible(obj) //查看对象obj是否可以拓展Object.preventExtensions(obj) //设置obj不可以拓展Object.seal(obj); //封印对象Object.isSealed(obj);//判断是否被封印isFrozen/freeze对象的拓展:不允许增加属性对象的封印:不允许增加属性、不允许删除属性对象的冻结::不允许增加属性、不允许删除属性、不允许修改属性

深度冻结对象
function myFreeze(obj) {Object.freeze(obj);for(var key in obj){if(typeof obj[key]==="object"&&obj[key]!==null){myFreenze(obj[key]);}}}
