核心提示:理解Object.defineProperty的作用javascript63目标属性是否可以使用delete删除目标属性是否可以再次设置特性//-----------------测试目标属性是...
理解Object.defineProperty的作用
javascript63
目标属性是否可以使用delete删除
目标属性是否可以再次设置特性
//-----------------测试目标属性是否能被删除------------------------ var obj = {} //第一种情况:configurable设置为false,不能被删除。 Object.defineProperty(obj,"newKey",{ value:"hello", writable:false, enumerable:false, configurable:false }); //删除属性 delete obj.newKey; console.log( obj.newKey ); //hello //第二种情况:configurable设置为true,可以被删除。 Object.defineProperty(obj,"newKey",{ value:"hello", writable:false, enumerable:false, configurable:true }); //删除属性 delete obj.newKey; console.log( obj.newKey ); //undefined //-----------------测试是否可以再次修改特性------------------------ var obj = {} //第一种情况:configurable设置为false,不能再次修改特性。 Object.defineProperty(obj,"newKey",{ value:"hello", writable:false, enumerable:false, configurable:false }); //重新修改特性 Object.defineProperty(obj,"newKey",{ value:"hello", writable:true, enumerable:true, configurable:true }); console.log( obj.newKey ); //报错:Uncaught TypeError: Cannot redefine property: newKey //第二种情况:configurable设置为true,可以再次修改特性。 Object.defineProperty(obj,"newKey",{ value:"hello", writable:false, enumerable:false, configurable:true }); //重新修改特性 Object.defineProperty(obj,"newKey",{ value:"hello", writable:true, enumerable:true, configurable:true }); console.log( obj.newKey ); //hello
除了可以给新定义的属性设置特性,也可以给已有的属性设置特性
//定义对象的时候添加的属性,是可删除、可重写、可枚举的。 var obj = { test:"hello" } //改写值 obj.test = 'change value'; console.log( obj.test ); //'change value' Object.defineProperty(obj,"test",{ writable:false }) //再次改写值 obj.test = 'change value again'; console.log( obj.test ); //依然是:'change value'
提示:一旦使用Object.defineProperty给对象添加属性,那么如果不设置属性的特性,那么configurable、enumerable、writable这些值都为默认的false
var obj = {}; //定义的新属性后,这个属性的特性中configurable,enumerable,writable都为默认的值false //这就导致了neykey这个是不能重写、不能枚举、不能再次设置特性 // Object.defineProperty(obj,'newKey',{ }); //设置值 obj.newKey = 'hello'; console.log(obj.newKey); //undefined //枚举 for( var attr in obj ){ console.log(attr); }
设置的特性总结:
value: 设置属性的值
writable: 值是否可以重写。true | false
enumerable: 目标属性是否可以被枚举。true | false
configurable: 目标属性是否可以被删除或是否可以再次修改特性 true | false