JavaScript中的對象是動態(tài)的。 我們可以添加和刪除屬性需要。
有兩種基本的創(chuàng)建對象的方法:
例如:
var book1 = {
name : "Javascript"
};
var book2 = new Object();
book2.name = "Javascript";
book1.website = "www.o2fo.com";
book2.website = "www.o2fo.com";
book1.name = "CSS";
book2.name = "HTML";
console.log(book1.name);
console.log(book1.website);
console.log(book2.name);
console.log(book2.website);
上面的代碼生成以下結(jié)果。
book1和book2都是具有name屬性的對象。然后,為這兩個對象分配一個網(wǎng)站
屬性。
我們可以在對象或更高版本的定義之后添加屬性。
對象打開以進行修改,除非您另行指定。
當(dāng)一個屬性首次添加到對象時,JavaScript在對象上使用一個名為[[Put]]的內(nèi)部方法。
[[Put]]方法在對象中創(chuàng)建一個存儲來存儲屬性。
[[Put]]
在對象上創(chuàng)建一個屬性。
該屬性稱為自有屬性。
新添加的屬性(自己的屬性)表示對象的特定實例具有該屬性。
屬性(自己的屬性)直接存儲在實例上。
將新值分配給現(xiàn)有屬性時,調(diào)用稱為 [[Set]]
的單獨操作。
[[Set]]操作將使用新的屬性替換當(dāng)前值。
檢查對象中是否存在屬性使用運算符中的。
運算符中的在特定的查找具有給定名稱的屬性
對象,并返回true如果找到它。
以下代碼顯示了如何使用中的來檢查book1對象中的一些屬性:
var book1 = {
name : "Javascript"
};
var book2 = new Object();
book2.name = "Javascript";
book1.website = "www.o2fo.com";
book2.website = "www.o2fo.com";
book1.name = "CSS";
book2.name = "HTML";
console.log("name" in book1); // true
console.log("age" in book1); // true
console.log("title" in book1); // false
上面的代碼生成以下結(jié)果。
我們可以以同樣的方式檢查方法的存在。
以下向book1添加了一個新函數(shù)writeLine(),并在中使用確認功能的存在。
var book1 = {
name : "Javascript",
writeLine : function() {
console.log(this.name);
}
};
console.log("writeLine" in book1); // true
上面的代碼生成以下結(jié)果。
以下顯示如何區(qū)分自己的屬性和建筑屬性。
操作符中的檢查自己的屬性和原型屬性。
hasOwnProperty()
方法存在于所有對象上僅當(dāng)給定屬性存在且是自己的屬性時才返回true。
以下代碼比較在中使用的結(jié)果
hasOwnProperty()
在book1的不同屬性:
var book1 = {
name : "Javascript",
writeLine : function() {
console.log(this.name);
}
};
console.log("name" in book1);
console.log(book1.hasOwnProperty("name"));
console.log("toString" in book1);
console.log(book1.hasOwnProperty("toString"));
上面的代碼生成以下結(jié)果。
將屬性設(shè)置為 null
不會從對象中完全刪除該屬性。
這樣的操作調(diào)用 [[Set]]
,值為null,只有替換屬性的值。
delete
運算符完全從對象中刪除一個屬性。
delete
運算符在單個對象屬性上工作,并調(diào)用內(nèi)部操作名為 [[Delete]]
。
當(dāng)刪除操作成功時,它返回true。
以下代碼顯示如何使用delete操作符。
var book1 = {
name : "Javascript"
};
console.log("name" in book1);
delete book1.name;
console.log("name" in book1);
console.log(book1.name);
上面的代碼生成以下結(jié)果。
默認情況下,添加到對象的所有屬性都是可枚舉的。
我們可以使用for-in循環(huán)遍歷這些屬性。
可枚舉屬性的[[Enumerable]]屬性設(shè)置為true。
以下循環(huán)輸出對象的屬性名稱和值:
var property;
var book1 = {
name : "Javascript"
};
var property;
for (property in book1) {
console.log("Name: " + property);
console.log("Value: " + book1[property]);
}
上面的代碼生成以下結(jié)果。
Object.keys()
方法檢索ienumerable屬性名稱的數(shù)組,如下所示:
var book1 = {
name : "Javascript"
};
var properties = Object.keys(book1);
var i, len;
for (i=0, len=properties.length; i < len; i++){
console.log("Name: " + properties[i]);
console.log("Value: " + book1[properties[i]]);
}
上面的代碼生成以下結(jié)果。
for-in循環(huán)枚舉原型屬性,而Object.keys()僅返回自己的(實例)屬性。
并非所有屬性都是可枚舉的。
對象上的大多數(shù)本地方法都有其[[Enumerable]]屬性集假。
我們可以通過使用propertyIsEnumerable()方法來檢查屬性是否可枚舉,它存在于每個對象上:
var book1 = {
name : "Javascript"
};
console.log("name" in book1);
console.log(book1.propertyIsEnumerable("name"));
var properties = Object.keys(book1);
console.log("length" in properties);
console.log(properties.propertyIsEnumerable("length"));
上面的代碼生成以下結(jié)果。
更多建議: