在访问对象以及添加属性时,我想要澄清一下,我对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类型属性键名。意思是我不希望它看起来像这样。它必须通过使用“”来遵循我上面描述的对象。
dev1 : { version : "1.0", name: "AIR" }
有没有办法将属性名称定义为字符串?可以这样做吗?
var newKey = "health";
device['dev1'].newKey = newValue;
非常感谢!
答案 0 :(得分: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.propName
与obj['propName']
相同。但如果您提前不知道属性名称,则必须使用括号语法。 obj[propNameString]
答案 1 :(得分:0)
你的dev1对象后面缺少一个逗号:
var device = {
dev1 : { "version" : "1.0", "name" : "AIR" },
dev2 : { "version" : "1.0", "name" : "BEE" }
}
关于添加密钥的问题,您可能希望尽可能使用点符号,并使用变量键名称的数组符号:
var newKey = "health";
device.dev1[newKey] = newValue;
答案 2 :(得分: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;