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;
for(var propName in person){
console.log(propName);
}
我們就可以得到如下:

即此時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
You got a dream, you gotta protect it.
如果你有一個夢想,就必須捍衛它!
