Javascript对象(动态属性名称)

Chr*_*ian 3 javascript object

如果我有一个对象,就像这样

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)

我想有更好的方法吗?

Jam*_*ice 7

我想有更好的方法吗?

假设我已正确理解你的问题,那么不,不是真的.你展示的方式是做到这一点的方式.无法在文字本身内部使用动态密钥,因此您必须先声明它,然后单独分配属性:

var o2 = {};
o2[o.test] = "bla";

o2; // { 1: "bla" }
Run Code Online (Sandbox Code Playgroud)

更新

详细信息在规范中给出.这是对象文字属性标识符的语法:

PropertyName:
    IdentifierName
    StringLiteral
    NumericLiteral

串文字的生产是不言自明的.以下是IdentifierName生产的作用:

生产PropertyName:IdentifierName的计算方法如下:

  1. 返回包含与IdentifierName相同的字符序列的String值.

对于NumericLiteral生产:

生产PropertyName:NumericLiteral的计算方法如下:

  1. nbr是形成NumericLiteral值的结果.
  2. 返回ToString(nbr).

您可以从中看到,除了对象初始化器中的字符串之外,不可能使用任何其他内容.