特性具有名對值。
特性名稱可以為任何字串,或是 JavaScropt 允許的值,undefined 除外。
物件內能包含其他物件,可為巢狀結構。
JavaScropt 包含原型鍊,允許物件繼承其他物件的特性。
物件實字
物件實字是以一組大括號圍起的零或多個名值對。
物件可以出現在任何運算式。
擷取
用 [] 圍起的字串運算式,即可從物件中擷取值。
也可改為 . 註記。
如果擷取不存在的成員,則會產生undefined。
var stooge = {
“first-name”: ‘Joe’,
‘last-name’: ‘Howard’
};
stooge[‘middle-name’]; //undefined
|| 運算子能用於填入預設值。
若從 undefined 中擷取值,會丟出 TypeError。
更新
物件的值可以透過指派而更新,如果原本已有就會取代該特性值。
如果物件中還沒有特性名稱,就會新增一個特性。
stooge[‘first-name’] = ‘Jerome’;
stooge[‘middle-name’] = ‘Lester’;
參考
物件透過參考傳遞,物件不會被複製。
var a = {}, b = {}, c = {};
// 各自參考不同物件
a = b = c = {};
// 參考同一空物件
原型
每個物件都聯繫到一個 prototype 物件,由此繼承特性。
變更物件,原型並不會受到改變。
原型聯繫只在於擷取值。
如果物件缺少特性名稱,JavaScript 會嘗試從原型取值,層層向上找,直至Object.prototype。
原型關係為動態,在原型中加入新特性,基於此原型的新的物件也會有新特性。
反映
使用 typeof 可以幫助判斷特性型別。
原型鏈的特性皆可產生值。
hasOwnProperty 可檢查物件所擁有的特性(部會檢索原型鏈)
列舉
可以用 for-in 迴圈處理物件的特性,也可搭配 hasOwnProperty 過濾不需要的值。
物件的特性名稱沒有序列,若需要序列化的資料,請用陣列。
var name;
for (name in another_stooge) {
if (typeof another_stooge[name] !== ‘function’){
document.writeln(name + ‘: ‘ + another_stooge[name]);
}
}
刪除
delete 可從物件移除特性,不會影響物件聯繫的其他物件。
從物件裡移除特性,能揭露來自原型聯繫的特性。
another_stooge.nickname; //’Moe’
delete another_stooge.nickname;
another_stooge.nickname; //’Curly’
減少全域變數
JavaScript 可以輕易定義且保存所有全域變數。
替程式建立唯一一個全域變數。
var MYAPP = {};
MYAPP.stooge = {
“first-name”: “Joe”,
“last-name”: “James”,
};
MYAPP.flight = {
airline: “Oceanic”..
..
}