歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> JavaScript中對象字面量的理解

JavaScript中對象字面量的理解

日期:2017/3/1 9:10:16   编辑:Linux編程

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

Copyright © Linux教程網 All Rights Reserved