如果我有一个对象,就像这样
var o = {
test : 1
}
Run Code Online (Sandbox Code Playgroud)
我想要第二个对象,其中一个键应该是o.test的值.像这样的东西:
var o2 = {
o.test : "bla"
}
Run Code Online (Sandbox Code Playgroud)
我知道这是不可能的,但现在这样做有更好(更清洁)的方法吗?
目前我所说的是这个:
var o2 = {};
o2[o.test] = "bla"
Run Code Online (Sandbox Code Playgroud)
我想有更好的方法吗?
我想有更好的方法吗?
假设我已正确理解你的问题,那么不,不是真的.你展示的方式是做到这一点的方式.无法在文字本身内部使用动态密钥,因此您必须先声明它,然后单独分配属性:
var o2 = {};
o2[o.test] = "bla";
o2; // { 1: "bla" }
Run Code Online (Sandbox Code Playgroud)
更新
详细信息在规范中给出.这是对象文字属性标识符的语法:
PropertyName:
IdentifierName
StringLiteral
NumericLiteral
该串文字的生产是不言自明的.以下是IdentifierName生产的作用:
生产PropertyName:IdentifierName的计算方法如下:
- 返回包含与IdentifierName相同的字符序列的String值.
对于NumericLiteral生产:
生产PropertyName:NumericLiteral的计算方法如下:
- 设nbr是形成NumericLiteral值的结果.
- 返回ToString(nbr).
您可以从中看到,除了对象初始化器中的字符串之外,不可能使用任何其他内容.