屬性描述符 已完結

2021-08-21 17:08:13 字數 1417 閱讀 7321

屬性描述符(或者說『資料描述符』)用於描述物件中屬性的一些特性——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 ...