2013-06-21 129 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.