JavaScript中對象字面量的理解
第一部分
我們知道JavaScript中的數據類型有基本數據類型和引用類型,其中Object類型就是非常常用的類型。那麼如果創建一個Object類型的實例呢?下面我介紹兩種方法:
第一:構造函數法。
var person=new Object();
person.name="zhuzhenwei";
person.age=20;
這裡Object()實際上是默認的構造函數,顯然,為滿足需要,我們可以通過後兩條語句添加新的屬性。JavaScript高級程序設計第3版83頁介紹說,該構造函數為新對象定義了默認的屬性和方法。但,這是真的嗎?我們可以驗證一下。因為for-in語句可以遍歷對象中所有的屬性,因此我們可用它來驗證:
var person=new Object();
for(var propName in person){
console.log(propName);
}
如果Object構造函數有默認屬性,那麼我們在控制台上應該是可以看到的,但實際上:
什麼都沒有?!
也就是說Object本身是不具有任何默認的屬性的。
因為如果我們添上後面兩句:
var person=new Object();
person.name="zhuzhenwei";
person.age=20;<br>for(var propName in person){<br> console.log(propName);<br>}
我們就可以得到如下:
即此時person就有了兩個屬性,也就是說,Object函數自身確實沒有默認的屬性。
但是,真的是這樣嗎?javascript高級程序設計會出現這樣的錯誤嗎?答案是不會~
因為在這裡使用for-in語句是不合適的,不能通過它枚舉初object的所有屬性。它只適用於window之類的對象,這裡我們最好使用in操作符。因為object通過測試是不可枚舉的。 alert(object.propertyisenumerable("prototype"));//false
var person=new Object();
console.log("toString" in person);//true
console.log("valueOf" in person);//true
console.log("constructor" in person);//true
也就是說Object至少是有上述屬性和方法的。
第二:對象字面量表示法
var person={
name:"zhuzhenwei",
age:18
};
這裡也創建了一個對象實例,同樣通過for-in語句,我們可以驗證其也只有name和age兩個屬性,且在通過對象字面量表示法定義對象時,實際上不會調用Object構造函數。
關於對象字面量有以下一點需要注意的地方:
在末尾需加分號;表示結束。
在一個屬性定義之後用逗號分隔,最後一個屬性不需要
屬性名可以加雙引號,好處是我們可以包含錯誤的字符。並使用方括號表示法來訪問對象的屬性。
比如:
var person=new Object();
person.age age=18;
console.log(person.age age);
這時,由於屬性名中包含了空格,因此得到的結果一定是 語法錯誤。
然而:
var person={
"age age":18
};
console.log(person["age age"]);
這時候我們就可以得到正確的答案了。
最後,實際上對象字面量還可以作為參數傳遞,大家有興趣可以去了解,這裡就不介紹了~
第二部分:
什麼使數組字面量呢?對象字面量用於創建對象,數組字面量即用於創建數組。創建數組有兩種方法。
第一:構造函數法.
var arr=new Array();
第二:數組字面量法
var arr=["zhu","zhen","wei"];
因為所有的引用類型都是繼承自Object,因此Array也是繼承自object的,並在繼承的基礎上添加了自己的屬性和方法。
var arr=new Array();
console.log("toString" in arr);//true
console.log("valueOf" in arr);//true
console.log("length" in arr);//true