屬性描述符(或者說『資料描述符』)用於描述物件中屬性的一些特性——value(即指屬性值,沒錯——屬性值也屬於屬性描述符)、writable、enumerable、configurable(其實屬性描述符不止這些,這兒僅說說常見的一些)
當我們建立乙個普通屬性時,這三個屬性描述符都會使用預設值——true
設定屬性描述符——或者說給物件新增乙個新屬性或修改已有屬性
方法:object.defineproperty(物件, 屬性名, )
var obj =
obj.age = 30;
console.log(obj.age);//
30,由於writable為true,固可寫
object.defineproperty(obj, 'age', );
obj.age = 40;
console.log(obj.age);//
30,由於writable為false,固不可寫
writable決定我們是否可以修改屬性的值——如上例那樣
在非嚴格模式下,修改『writable:false』會靜默失敗,不報錯;在嚴格模式下typeerror
configurable決定屬性是否可配置
對於不可配置屬性——我們不能使用defineproperty修改屬性描述符(因此使「configurable:false」是乙個單向操作);不可配置屬性也不能被delete
var obj =
obj.age =
30;console.
log(obj.age);//30
object.defineproperty(obj, 'age', );
obj.age =
40;console.
log(obj.age);//40,可見——我們能夠更改不可配置屬性的值
delete obj.age;
console.
log(obj.age);//40,可見——我們不能刪除不可配置屬性
在非嚴格模式下,delete『configurable:false』會靜默失敗,不報錯;在嚴格模式下typeerror
*要注意有乙個小小的例外:即便屬性是configurable:false, 我們還是可以
把writable 的狀態由true 改為false,但是無法由false 改為true*
enumerable控制的是屬性是否會出現在物件的屬性列舉中(即for-in迴圈中)。不可列舉屬性在for-in中不能遍歷出來,但是我們依然能夠正常的通過屬性訪問表示式進行讀取
var obj =
object.defineproperty(obj, 'name', );
for(pro in obj)
//僅輸出age,可見name不能被列舉
屬性描述符
在es5開始,所有屬性都具備了屬性描述符。我們可以通過object.getownpropertydescriptor來觀察到屬性的描述符,它是長這樣子的。object.getownpropertydescriptor a writable決定該屬性是否唯讀。enumerable決定該屬性是否可列舉。...
屬性描述符
property descriptor 屬性描述符 是乙個普通物件,用於描述乙個屬性的相關資訊 通過object.getownpropertydescriptor 物件,屬性名 可以得到乙個物件的某個屬性的屬性描述符 object.getownpropertydescriptors 物件 可以得到某...
物件屬性描述符
從 es5 開始,物件的屬性都具備了屬性的描述符,它能設定屬性的特性。我們可以使用 object.defineproperty 來新增或者配置乙個屬性並對它的特性進行配置。屬性有 writable enumerable 和 configurable 這三個或之一都為屬性描述符。一.writable ...