JS語言精粹學習筆記--對象字面量

對象

JS的簡單數據類型包括:數字、字符串、布爾值(true/false)、null值和undefined,其他所有的值都是對象。數字、字符串、布爾值貌似對象,因爲他們擁有方法,但他們是不可變的。JS中的對象是可變的鍵控集合(keyed collection)。在JS中,數組、函數和正則表達式都是對象,對象也是對象。

對象是屬性的容器,其中每個屬性都擁有名字和值。屬性的名字可以是包括空字符串在內的任意字符串,屬性值可以是除undefined以外的任意值。

JS裏的對象是無類型(class free)的。它對新屬性的名字和值沒有限制,對象適用於彙集和管理數據,對象可以包含其他對象,所以它們很容易表示成樹狀或圖形結構。

JS包含一種原型鏈的特性,允許對象繼承另一個對象的屬性。正確地使用它能減少對象的初始化時消耗的時間和內存。(/lpc/-java類的繼承咯?)

對象字面量

對象字面量是一種可以方便地按指定的規格創建新對象的表述法。屬性名可以是標識符或字符串。這些名字被當作字面量名而不是變量名來對待,所以對象的屬性名在編譯時才能知道。屬性的值就是 表達式。

對象字面量提供了一種非常方便的創建新對象的表示法。一個對象字面量就是包圍在一對花括號中的零或多個”名/值“對。對象字面量可以出現在任何允許表達式出現的地方。

var  empty_object = {};

var  stooge   =   {

"first-name" : "Jerome",

"last-name":"Howard"

}

屬性名可以是包括空字符串在內的所有字符串。在對象字面量中,如果屬性名是一個合法的Javascript標識符且不是保留字,則並不強制要求你用引號括住。所以上面的代碼中”first-name“必須用”“括起來,而first_name就不用(因爲中間是下劃線)。逗號用來分割多個“名/值”對。

屬性的值可以從包括另一個對象字面量在內的任意字表達式獲得。對象可以是嵌套的:

var flight= {

airline   :    "Oceanic",

number  :  815,

departure  :  {

TATA : "SYD",

time : "2004-09-22  14:55"

city  :"Sydeny"

},

arrival :  {

TATA  :  "LAX",

time  :2004-09-22   1455“,

city  :  "Los  Angeles"

}

}

檢索

要檢索對象裏面包含的值,可以採用在[]後綴括住一個字符串表達式的方式。如果字符串表達式是一個字符串字面量,而且是一個合法的Javascript標識符且不是保留字,那麼也可以用 . 表示法。

stooge ["first-name"] //"Jerome"

flight.departure.TATA //"SYD"

如果檢索一個不存在的成員屬性的值,將返回undefined||運算符可以用來填充默認值:

var middle = stooge["middle-name"] || ["none"]; //若不存在middle-name屬性,將返回none

嘗試從undefined的成員屬性中取值將會導致TypeError異常。這時可以通過&&運算符來避免錯誤。.

flight.equipment //unfefined

flight.equipment //throw"TypeError"

flight.equipment  &&  flight.equipment.model; //undefined

更新

對象裏的值可以通過賦值語句來更新。如果屬性名已經存在於對象裏,那麼這個屬性的值就會被替換。

stooge['first-name']  =  'Jerome';

如果對像之前沒有該屬性名,那麼該屬性名就被擴充到對象中。(js真靈活!!)

stooge[''middle-name']  =  'Lester' ;

stooge.nickname  =  'Curly';

引用

對象通過引用來傳遞。它們永遠不會被複制:

var x = stooge;

x.nickname  =  'Curly';

var  nick  =  stooge.nickname; //x和stooge指向同一對象,nick爲'Curly'。
var  a = {},b={},c={}; //a,b和c每個都引用一個不同的空對象。

var  a=  b  =  c = {}; //都引用同一空對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章