JavaScript參考型別之Object類,javascriptobject
ECMAScript中的Object類跟Java中的Object類相似,ECMAScript中的所有類都由這個類繼承而來,Object類中的所有屬性和方法都會出現在其它類中,所以理解Object類,就可以更好的理解其它類。
對象的建立
JavaScript的對象是屬性的容器,其中每個屬性都擁有名字和值。屬性的名字可以是包括Null 字元串在內的任一字元串。屬性值可以是除undefined值之外的任何值。
JavaScript裡的對象是無類型的。它對新屬性的名字和屬性的值沒有限制。對象和適用於彙集和管理資料。對象可以包含其他對象,所以它們可以容易地表示成樹狀或圖形結構。
Object類型用於建立自訂對象(執行個體),建立方式有兩種:
new後面加Object構造方法
var cat = new Object();cat.name = "tomcat";cat.age = 3;alert("cat's name is " + cat.name + " and its age is " + cat.age);
對象屬性的訪問可以直接採用 對象名.屬性名稱 的方式。
對象字面量標記法
<pre name="code" class="javascript">var dog = {"name":"hotdog","age":3}
裡面的屬性名稱和屬性值採用key:value鍵值對的形式,其中key上面的引號通常可以省略掉。
var dog = {name:"hotdog",age:3}alert("dog's name is " + dog["name"] + " and its age is " + dog["age"]);
對象屬性的方式也可以採用 對象名[屬性名稱] 的方式。
對象屬性的訪問
對象屬性的訪問方式有兩種:點標記法和方括弧標記法。
方括弧標記法的優點
var pName="name";alert(cat[pName]);
- 如果屬性名稱中包含會導致語法錯誤的字元,或者屬性名稱使用的是關鍵字或保留字,也可以用方括弧標記法。
cat["lovely brother"]="Tom";
屬性名稱中包含空格所以不能使用點標記法訪問它.
var catObj = {name : "tomcat","lovely brother" : "tom"}var pName = "name";alert(catObj[pName]); // output tomcatalert(catObj["lovely brother"]); // output tom
點標記法優點
如果屬性的層次比較深的時候,使用方括弧標記法表示麻煩;但是使用點標記法即可方便的一層層的訪問到需要的屬性。
var animals = {dog : {name : "hotdog",age : 4},cat : {name : "tomcat",age : 3}}
點標記法 訪問 dog 的 name 屬性
alert(animals.dog.name);
方括弧標記法 訪問 dog 的 name 屬性
alert(animals["dog"]["name"]);
使用方括弧標記法,如果屬性比較多的時候,必須挨個的使用[ 和 ],且還要用引號引起屬性名稱,不如點標記法的直接。
比較完兩種方式:訪問屬性推薦使用點標記法,除非沒辦法用點標記法的時候選擇用方括弧訪問
Object類的屬性
Object類具有下列屬性:
- constructor --- 對建立對象的函數的引用。對於Object類,該指標指向原始的object() 函數。
- prototype --- 對該對象的對象原型的引用。對於所有的類,它預設返回Object對象的一個執行個體。
var obj = new Object();alert(obj.constructor);// output /*function Object() { [native code]}*/
Object類的方法
Object類具有如下方法:
- hasOwnProperty --- 判斷對象是否有某個特定的屬性。必須用字串指定該屬性(例如:obj.hasOwnProperty(“name”))。
- isPrototypeOf(object) --- 判斷該對象是否為另一個對象的原型。
- propertyIsEnumerable(property) --- 判斷給定的屬性是否可以用for…in 語句進行枚舉。
- toString() --- 返回該對象的原始字串表示。
- valueOf() --- 返回最適合該對象的原始值。
var tomObj = {name : "tomcat",age : 4}alert(tomObj.hasOwnProperty("name")); // output truealert(tomObj.hasOwnProperty("sex")); // output falsealert(tomObj.toString()); // [object Object]alert(tomObj.valueOf()); // [object Object]
hasOwnProperty()、isPrototypeOf(object)、propertyIsEnumerable(property) 這三個方法在講了原型prototype之後再細述,這裡不做介紹了。