JS語言精粹學習筆記--物件字面量

風靈使發表於2019-04-21

物件

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 = {}; //都引用同一空物件。

相關文章