javascript中对象是经常用到的东西,今天我来写一些对于创建对象时,定义属性时的一些特征值。
这些特征值不能直接访问,下面举例说明。
var a={
'name':'kasol',
'age':18,
'hobby':'ES'
};
在定义了这个对象之后,该对象上有一个name属性,以这样的方式被创建时,name属性上有4个特征值,分别是
[[Configurable]] ,[[Writable]] ,[[Enumerable]], [[Value]].
[[Configurable]]表示能否配置,即能否通过delete来删除某一个属性,或者能否修改属性的特性,或者修改为访问器属性,如果为false,那么非严格模式下进行上述操作则不会有效果,严格模式下则会报错。
[[Writable]]表示能否修改属性的值,如果此项为false,那么a.name='moon'不会有效果。
[[Enumerable]]表示能否被for in 循环枚举出来,如果此项为false,for in 循环下不会把此属性输出。
[[Value]]表示该属性的值,读操作从这里读,写操作也会覆盖该项,默认值为undefined。
想要修改某个对象的属性的特征值,要用Object.defineProperty(obj,property,descriptor);
比如Object.defineProperty(a,'name',{writable:false,value:'moon'});
第一个参数是要更改的目标对象,第二个是要更改的属性,第三个是描述符,是一个特征值的对象。
有一点要注意,假如使用了该方法将Configurable设为false以后,就不能再对除了writable之外的特征值进行更改了,即使是Configurable=true也不行