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