我想使用javascript对象初始值表示法动态创建JavaScript对象,但是从config中获取键,因此不是
var obj = {
'key' : 'some value'
};
我想:
var config = {
myKeyName: 'key'
};
var obj = {
config.myKeyName : 'some value' // this will not work, just to illustrate
};
问题是如何在这种情况下放置config.myKeyName
的值。
这可能吗?
编辑:我知道使用索引([]
),但在深层嵌套对象的情况下,这不是一个选项。
答案 0 :(得分:1)
您可以使用方括号语法动态访问属性。例如,假设config.keyName
包含字符串" hello":
var obj = {};
obj[config.keyName] = "some value";
/* The above is equivalent to:
var obj = {
hello: "some value"
};
*/
值得注意的是,正如其他人所提到的,这是一个JavaScript对象文字。它不是JSON。 JSON只是一种常用于数据传输的文本格式,恰好可以共享JavaScript对象文字的一些属性。
答案 1 :(得分:1)
Javascript中没有“JSON表示法”这样的东西。它是对象文字表示法,JSON使用Javascript表示法的一个子集,而不是相反。
您不能在对象文字中使用变量作为属性名称。您必须使用属性索引将属性添加到对象:
var obj = {};
obj[config.myKeyName] = "some value";
答案 2 :(得分:1)
从你的评论和编辑中,你的问题似乎是:对于深度嵌套的对象,我可以让键是动态的,但仍然具有对象初始化器语法。
例如,不是:
var key1 = "a", key2 = "b", key3 = "c", obj;
obj = {}
obj[key1] = {};
obj[key1][key2] = {};
obj[key1][key2][key3] = 42;
但是
var obj = {
/*magic here using key1 to get "a"*/: {
/*magic here using key2 to get "b"*/: {
/*magic here using key3 to get "c"*/: 42
}
}
};
答案是否定的,除了eval
之外没有办法做到这一点。对象初始值设定项中的键不能从变量派生。 []
符号是使用字符串定义属性名称的最佳选项(我能看到的唯一其他选项是Object.defineProperty
,这将更糟糕,仅限ES5)。对于深层嵌套的结构,听起来你会想要某种递归的工厂函数。
答案 3 :(得分:0)
var obj = {}
obj[config.myKeyName] = 'some value';
答案 4 :(得分:0)
var config = {
myKeyName: 'key'
};
var obj = {
'config.myKeyName' : 'some value' // note quote here on key
};
//console.log(obj);