數(shù)據(jù)屬性具有兩個(gè)附加屬性。
[[Value]]保存屬性值。
在對(duì)象上創(chuàng)建屬性時(shí),會(huì)自動(dòng)填充此屬性。
所有屬性值都存儲(chǔ)在[[Value]]中,即使該值是一個(gè)函數(shù)。
[[Writable]]屬性是一個(gè)布爾值,指示該屬性是否可以寫(xiě)入。
默認(rèn)情況下,除非另行指定,否則所有屬性都是可寫(xiě)的。
使用這兩個(gè)附加屬性,可以完全定義數(shù)據(jù)屬性使用Object.defineProperty()。
考慮這個(gè)代碼:
var book1 = {
name : "Javascript"
};
我們已經(jīng)看到了上面的代碼,并添加了 name
屬性設(shè)置為book1并設(shè)置其值。
我們可以使用以下代碼實(shí)現(xiàn)相同的結(jié)果:
var book1 = {};
Object.defineProperty(book1, "name", {
value : "Javascript",
enumerable : true,
configurable : true,
writable : true
});
當(dāng)使用Object.defineProperty()定義一個(gè)新屬性時(shí),它“重要的是指定所有的屬性,因?yàn)椴紶枌傩苑駝t自動(dòng)默認(rèn)為false。
以下代碼創(chuàng)建不可枚舉,不可配置的name屬性不可寫(xiě)因?yàn)樗粫?huì)在調(diào)用Object.defineProperty()時(shí)顯式地使任何這些屬性為真。
var book1 = {};
Object.defineProperty(book1, "name", { value : "Javascript" }); console.log("name" in book1); // true console.log(book1.propertyIsEnumerable("name")); // false delete book1.name; console.log("name" in book1); // true book1.name = "CSS"; console.log(book1.name); // "Javascript"
上面的代碼生成以下結(jié)果。
上面的代碼生成以下結(jié)果。...
在非嚴(yán)格模式下,操作會(huì)靜默失敗。
更多建議: