你能评估JS对象中的属性名称吗?

5

我知道你可以在JS对象内部评估属性的值,就像下面这样:

let object = {
  value: 5+5
};

我想知道是否有可能用JS评估属性名称,即实现以下内容:
let object;
object[5+5].value = "ten";

作为类似以下的内容:
let object = {
  5+5: "ten"
};

3
你的代码中没有 JSON。JSON 代表“JavaScript 对象表示法”,是一个字符串。你只使用了常规的对象字面量。 - blex
2个回答

7

在ES2015中,可以使用这个特性。但在ES5中不行。但首先要澄清一件事:这是JavaScript,而不是JSON。

在ES2015(以前被称为ES6):

var something = "foo";
var object = {
  [something]: "bar";
};
alert(object.foo); // "bar"

[ ] 中可以是任何您喜欢的表达式。返回的值会被转换为字符串。这意味着您可以尝试一些有趣的操作,例如:

var counter = function() {
  var counter = 1;
  return function() {
    return counter++;
  };
};
var object = {
  ["property" + counter()]: "first property",
  ["property" + counter()]: "second property"
};
alert(object.property2); // "second property"

JSON是一种受JavaScript对象初始化语法启发的序列化格式。在JSON中绝对不可能做到像那样的任何事情。


1
当然。试一下这个:
'use strict';


let object = {
  [5+5]: "ten"
};

console.log(object); // Object {10: "ten"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接