【发布时间】:2016-10-08 12:55:22
【问题描述】:
我想创建一个{key:value} 类型的对象,其中键名是可变的。此类对象必须提供给chrome.storage.<storageType>.set(keys, function(){...})
有很多关于 SO 的相关问题以及有效的答案,但我无法找到问题的合适解释。它归结为在 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是最简单的吗?还是有一个单一的指令解决方案?
【问题讨论】:
-
“归结为在 JSON 对象上设置属性。” 不,它没有,因为这与 JSON 无关。 JSON 是一种用于数据交换的文本表示法。 (More) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。您要做的是创建一个具有名称来自变量的属性的对象。
-
@T.J.Crowder:感谢您的解释,我显然不清楚。
标签: javascript dictionary ecmascript-6