如何从两个变量创建一个{key:value}对象

How to create a {key:value} object from two variables?

本文关键字:key value 对象 一个 变量 两个 创建      更新时间:2023-09-26

我想创建一个类型为{key:value}的对象,其中键名是变量。该对象必须提供给chrome.storage.<storageType>.set(keys, function(){...})

很多的相关问题与工作的答案,但我无法找到一个合适的问题的解释。它可以归结为在JSON对象上设置属性。我做了这个测试:

var desiredKey = "123",
    desiredValue = "Value for key 123",
    foo;
// 1-The basic: Using a literal
console.log({ "123": desiredValue });
// 2-The problem occurs when the key name is not a literal
console.log({ desiredKey: desiredValue });
// 3-The solution is to assign a key explicitely
foo = {};
foo[desiredKey] = desiredValue;
console.log(foo);

结果:

Object { 123: "Value for key 123" }          <-- Literal
Object { desiredKey: "Value for key 123" }   <-- Variable (wrong)
Object { 123: "Value for key 123" }          <-- Assignment (ok)

问题:

  • 方法2为什么失败?存储了什么?desiredKey的参考/地址?
  • 方法3是最简单的吗?还是有一个指令解决方案?
方法四

计算属性:

从ECMAScript 2015开始,对象初始化语法也支持计算属性名。这允许您在方括号[]中放入一个表达式,它将被计算为属性名。这与属性访问器语法的括号表示法是对称的,您可能已经使用它来读取和设置属性。

var desiredKey = "123",
    desiredValue = "Value for key 123",
    foo = { [desiredKey]: desiredValue };
console.log(foo);