Javascript对象和属性:添加&访问属性

时间:2013-06-21 18:32:49

标签: javascript object properties

在访问对象以及添加属性时,我想要澄清一下,我对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;

非常感谢!

3 个答案:

答案 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.propNameobj['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;

Working Example.