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也不行