2013-05-02 55 views
1

我是Java腳本中的新成員。在我的兩本書中:http://www.larryullman.com/books/modern-javascript-develop-and-designhttp://www.packtpub.com/object-oriented-javascript/book 這兩位作者都說這個表示法:object[unknownYetProperty]應該在我們有對象和變量時工作,這是對象的未來屬性。問題是兩個其他符號工作object['unknownYetProperty']object.unknownYetProperty但不是第一個。JavaScript和方括號表示法

var a1 = 'spring'; 
var a2 = 'autumn'; 
var a3 = 'summer'; 

var object = { 
    propertyA1 : a1, // according to books this only this should work :-/ 
    propertyA2 : a2, 
    propertyA3 : a3 
} 

console.log(object[propertyA1] + ' ' + object['propertyA2'] + ' ' + object.propertyA3); 

工作例如: http://jsfiddle.net/cachaito/p78Le

誰能解釋一下?

+1

有沒有什麼可以解釋的,這是完全正常的,它不工作。符號2和3的確是正確的 – 2013-05-02 11:12:14

回答

1

您使用數組表示法訪問的屬性應指定爲字符串。

object['propertyA1'] 

是訪問對象屬性的正確方法。

無論何時創建對象,冒號符號的左側始終是一個字符串。因此,在使用數組表示法訪問時,字符串應該用於屬性。

+0

謝謝大家的回覆。我不明白爲什麼兩位作者都用這種方式來訪問未知的財產: - / – cachaito 2013-05-12 10:50:03

3

propertyAl不存在。字符串文字和點符號工作的原因是因爲您正確訪問對象的屬性。在第一個中,您嘗試訪問object[undefined],因爲propertyA1未定義。

3

object[propertyA1]的問題是propertyA1不存在。

基本上,這就像做以下(這也不行):alert(propertyA1);

在與其他兩個,它正確地引用你的對象上的字段對比:

object['propertyA2'] === object.propertyA2 === a2 == 'autumn' 

object.propertyA3 == a3 == 'summer' 

這是怎麼會工作:

var propertyA1 = 'propertyA1', 
    temp = object[propertyA1]; // === 'spring' 
1

那麼,當你這樣寫:

object['propertyA1'] 

Javascript嘗試查找名爲propertyA1內部對象的屬性。

但是當你使用:

object[propertyA1] 

JavaScript嘗試裏面找對象的屬性叫......呃,讓我們看看裏面有什麼var propertyA1 ...跆拳道?這個名字沒有變數! OK,然後propertyA1未定義這樣:

object[undefined] 

不同的是,使用Javascript知道什麼「propertyA1」是(字符串XD),但是當你刪除引號,這不是一個字符串,那是你還沒有聲明的變量然而。

相關問題