3

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

现在添加属性...我想使用字符串类型的属性键名。意思是我不希望它看起来像这样。它必须通过使用“”来遵循我上面描述的对象。

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

有没有办法将属性名称定义为字符串?可以这样做吗?

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

非常感谢!

4

3 回答 3

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]

于 2013-06-21T18:39:49.313 回答
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;

工作示例。

于 2013-06-21T18:38:59.300 回答
0

您的 dev1 对象后缺少逗号:

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

对于有关添加键的问题,您可能希望使用点表示法,并为变量键名使用数组表示法:

var newKey = "health";
device.dev1[newKey] = newValue;
于 2013-06-21T18:37:02.943 回答