function one(data) {
someotherfunction({
data.id: {
name: data.nm,
age: data.age
});
}
one({ id: 2, name: "Stack", age: "20" });
为什么我不能将data.id
设置为该子对象的属性名称?我尝试了许多设置id的方法,但只有在我将其设置为某个字符串名称时才有效....
var i = data.id;
someotherfunction({i:{name:data.nm,age:data.age});
它不识别变量吗?
答案 0 :(得分:1)
我不认为这是一个有效的propertyName或标识符,它肯定不是字符串文字。试试这样:
function one(data){
var nObj = { };
nObj[data.id] = { name : data.nm, age: data.age };
someotherfunction(nObj);
}
one({id:2,name:"Stack",age:"20"});
//nObj = { 2 : { name : "Stack, age : "20" } }
答案 1 :(得分:1)
来自RobG的回答:https://stackoverflow.com/a/6500668
在对象文字中(ECMA-262§11.1.5将其称为“对象” 初始化“)键必须是以下之一:
- IdentifierName
- 串文字
- NumericLiteral
醇>
您可以执行以下操作:
function one(data) {
var d = {};
d[data.id] = { name: data.name, age: data.age };
someotherfunction(d);
}
one({ id: 2, name: 'Stack', age: '20' });
在以下代码中提及代码:
http://jsfiddle.net/sna04g8m/1
答案 2 :(得分:0)
您可能正在寻找computed property names,这是某些浏览器支持的ECMAScript 2015中的新功能,例如:
// Requires support for ECMAScript 2015 computed property names
function one(data) {
return {
[data.id]: {
name: data.name,
age: data.age
}};
}
document.write(JSON.stringify(one({ id: 2, name: "Stack", age: "20" })));