1. 程式人生 > >JavaScript object

JavaScript object

理解JavaScript物件

物件是JavaScript的基本資料型別。物件是一種複合值:將很多值(原始值或者其他物件)聚合在一起。

JavaScript物件不僅可以保持自有的屬性,還可以從原型物件繼承屬性。物件的方法通常是繼承的屬性。原型式繼承是JavaScript的核心特徵。

JavaScript物件是動態的——可以新增屬性也可以刪除屬性,除了字串,數字,true,false,null和undefined之外(當使用他們的屬性方法時,會隱式的變成包裝物件),JavaScript中的值都是物件。

物件是可變的,我們通過引用而非值來操作物件,如果變數x是指向一個物件的引用,那麼執行程式碼var y=x;變數y也是指向同一個物件的引用,而非這個物件的副本,通過變數y修改這個物件亦會對變數x造成影響。

JavaScript規定,如果行首是大括號,一律解釋為語句(即程式碼塊)。如果要解釋為表示式(即物件),必須在大括號前加上圓括號。

物件的最常見的用法是:

建立(create),設定(set),查詢(query),刪除(delete),檢測(test),列舉(enumerate)它的屬性。

1.物件建立:

物件的生成方法,通常有三種方法。除了像上面那樣直接使用大括號生成({}),還可以用new命令生成一個Object物件的例項,或者使用Object.create方法生成。

第一種:物件直接量
var point={x:0,y:0;} 第二種:通過new後面加上建構函式建立物件 var o=new Object(); 第三種:通過Object.create方法生成 var o=Object.create(null);//這個方法可以傳入原型物件

總結:一般來說,第一種採用大括號的寫法比較簡潔,第二種採用建構函式的寫法清晰地表示了意圖,第三種寫法一般用在需要物件繼承的場合。

2.物件屬性的設定與查詢

查詢
o.x或者o["x"]

設定
o.x=2或者o["x"]=2

3.屬性的刪除

delete o.x
delete只能刪除自由屬性,不能刪除繼承屬性

4.屬性的檢測

javascript物件可以看作屬性的集合,我們經常會檢測集合中成員的所屬關係,判斷某個屬性是否存在於某個物件中。

(1)in運算子

運算子左側是屬性名,右側是物件。如果物件的自有屬性或繼承屬性中包含這個屬性則返回true。
"x" in o

(2)hasOwnProperty()

用於檢測給定的名字是否是物件的自有屬性。對於繼承屬性它將返回false。
o.hasOwnProperty("x")

(3)propertyIsEnumerable()

propertyIsEnumerable()是hasOwnProperty()的加強版,只有檢測到是自有屬性且這個屬性的可列舉性為true時它才返回true
o.propertyIsEnumerable("x")

5.屬性列舉

通過使用for/in迴圈可以在迴圈體中遍歷物件中所有可列舉的屬性(包括自由屬性和繼承的屬性)。物件繼承的內建方法不可列舉,但是程式碼中給物件新增的屬性都是可列舉的。

示例:遍歷物件的所有可列舉屬性
for(property in o){

}

示例:遍歷物件的自有屬性
for(property in o){ if(!o.hasOwnProperty(property)) continue; //跳過繼承的屬性 console.log(property);//輸出自有屬性 } 示例:跳過方法 for(property in o){ if(typeof o[property] === "function") continue; //跳過方法 } 

理解JavaScript物件

物件是JavaScript的基本資料型別。物件是一種複合值:將很多值(原始值或者其他物件)聚合在一起。

JavaScript物件不僅可以保持自有的屬性,還可以從原型物件繼承屬性。物件的方法通常是繼承的屬性。原型式繼承是JavaScript的核心特徵。

JavaScript物件是動態的——可以新增屬性也可以刪除屬性,除了字串,數字,true,false,null和undefined之外(當使用他們的屬性方法時,會隱式的變成包裝物件),JavaScript中的值都是物件。

物件是可變的,我們通過引用而非值來操作物件,如果變數x是指向一個物件的引用,那麼執行程式碼var y=x;變數y也是指向同一個物件的引用,而非這個物件的副本,通過變數y修改這個物件亦會對變數x造成影響。

JavaScript規定,如果行首是大括號,一律解釋為語句(即程式碼塊)。如果要解釋為表示式(即物件),必須在大括號前加上圓括號。

物件的最常見的用法是:

建立(create),設定(set),查詢(query),刪除(delete),檢測(test),列舉(enumerate)它的屬性。

1.物件建立:

物件的生成方法,通常有三種方法。除了像上面那樣直接使用大括號生成({}),還可以用new命令生成一個Object物件的例項,或者使用Object.create方法生成。

第一種:物件直接量
var point={x:0,y:0;} 第二種:通過new後面加上建構函式建立物件 var o=new Object(); 第三種:通過Object.create方法生成 var o=Object.create(null);//這個方法可以傳入原型物件

總結:一般來說,第一種採用大括號的寫法比較簡潔,第二種採用建構函式的寫法清晰地表示了意圖,第三種寫法一般用在需要物件繼承的場合。

2.物件屬性的設定與查詢

查詢
o.x或者o["x"]

設定
o.x=2或者o["x"]=2

3.屬性的刪除

delete o.x
delete只能刪除自由屬性,不能刪除繼承屬性

4.屬性的檢測

javascript物件可以看作屬性的集合,我們經常會檢測集合中成員的所屬關係,判斷某個屬性是否存在於某個物件中。

(1)in運算子

運算子左側是屬性名,右側是物件。如果物件的自有屬性或繼承屬性中包含這個屬性則返回true。
"x" in o

(2)hasOwnProperty()

用於檢測給定的名字是否是物件的自有屬性。對於繼承屬性它將返回false。
o.hasOwnProperty("x")

(3)propertyIsEnumerable()

propertyIsEnumerable()是hasOwnProperty()的加強版,只有檢測到是自有屬性且這個屬性的可列舉性為true時它才返回true
o.propertyIsEnumerable("x")

5.屬性列舉

通過使用for/in迴圈可以在迴圈體中遍歷物件中所有可列舉的屬性(包括自由屬性和繼承的屬性)。物件繼承的內建方法不可列舉,但是程式碼中給物件新增的屬性都是可列舉的。

示例:遍歷物件的所有可列舉屬性
for(property in o){

}

示例:遍歷物件的自有屬性
for(property in o){ if(!o.hasOwnProperty(property)) continue; //跳過繼承的屬性 console.log(property);//輸出自有屬性 } 示例:跳過方法 for(property in o){ if(typeof o[property] === "function") continue; //跳過方法 }