2013-06-21 173 views
3

我想要一些澄清,當涉及到訪問對象,以及添加屬性,我完全是新的Javascript。JavaScript的對象和屬性:添加和訪問屬性

我有像這樣的對象:

var device = { 
       dev1 : { "version" : "1.0", "name" : "AIR" }, 
       dev2 : { "version" : "1.0", "name" : "BEE" } 
      } 

有它爲什麼當我做這兩條線搞砸了的原因嗎? (我沒有使用瀏覽器,但在JavaScript作爲應用程序運行的純粹。)

console.log(device.dev1['version']) returns undefined 
console.log(device['dev1'].version) returns undefined 

現在添加屬性...我想用String類型的屬性鍵名稱。意思我不希望它看起來像這樣。它必須遵循上面通過使用「s」描述的對象。

 dev1 : { version : "1.0", name: "AIR" } 

有沒有辦法將屬性名稱定義爲字符串?可以這樣做嗎?

var newKey = "health"; 
device['dev1'].newKey = newValue; 

非常感謝!

+1

在你的最後一個例子中,你需要'device ['dev1'] [newKey]',它的計算結果爲'device ['dev1'] ['health']'。 – apsillers

+1

'dev1:{「version」:「1.0」,「name」:「AIR」}'後面缺少逗號。如果添加逗號,'console.log'語句就像您期望的那樣工作。 –

+1

正如牛排所說的那樣,「。而且,'console.log'總是'return's _undefined_,但是它也將東西記錄到控制檯。 –

回答

2

一旦我解決您的語法錯誤,你的代碼工作正常:

var device = { 
    dev1 : { "version" : "1.0", "name" : "AIR" }, // added comma here 
    dev2 : { "version" : "1.0", "name" : "BEE" } 
}; 
console.log(device.dev1['version']); // 1.0 
console.log(device['dev1'].version); // 1.0 
console.log(device.dev1.version); // 1.0 

和屬性名稱是總是字符串。他們不能成爲別的。如果它看起來像屬性名稱不是一個字符串,它只是一個字符串的簡寫。

您可以使用括號語法時,屬性名是一個可變的字符串,對於獲取和設置:

var newKey = 'someName'; 
var newValue = 'woot'; 

device.dev1[newKey] = newValue; 
console.log(device.dev1[newKey]); // woot 
console.log(device.dev1.someName); // woot 

所以如果你知道屬性名時間提前,那麼速記點屬性語法obj.propNameobj['propName']完全相同。但是,如果您提前不知道屬性名稱,則必須使用括號語法。 obj[propNameString]

+0

非常感謝你:)這是超級有用的。 – Cheruby

0

你缺少一個逗號您DEV1對象後:

var device = { 
    dev1 : { "version" : "1.0", "name" : "AIR" }, 
    dev2 : { "version" : "1.0", "name" : "BEE" } 
} 

對於你的問題有關添加鍵,你會想用點號的時候可能和陣列的符號,用於可變密鑰名稱:

var newKey = "health"; 
device.dev1[newKey] = newValue; 
0

你錯過了逗號(,

var device = { 
    dev1 : { "version" : "1.0", "name" : "AIR" }, // <---- 
    dev2 : { "version" : "1.0", "name" : "BEE" } 
}; 

var newKey = "health", newValue = 'newValue'; 
device.dev1.newKey = newValue; 
device['dev1']['newKey'] = newValue; 

Working Example.