我知道文字对象语法的限制是名称必须是文字。
顺便说一下,我需要完成以下任务,你建议我用哪种方式?
我有一个对象obj1,我想遍历然后传递给另一个只接受像参数这样的文字对象的函数。
我只写了一个基本的例子,以了解我所要求的基本概念。
问题出在最后一个循环上,请参阅内联注释。
obj1 = {k1 : 1} // simple literal object
fn = function (json) {
// this function can accept just literal object
console.log("result: ", json); // {key : true}, but I want {k1 : true}
}
for (key in obj1) {
obj = [];
fn ({
key : true // I want the key to be k1 and not key
})
};
答案 0 :(得分:2)
这样做......
var obj = {};
obj[key] = true;
fn(obj);
这就像你会得到的那样优雅。请不要使用eval()
。
答案 1 :(得分:1)
使用bracket notation将变量用作键。
function fn(obj) {
console.log("result: ", obj);
}
for (var key in obj1) {
var temp = {};
temp[key] = true;
fn (temp);
};
另请注意使用var
(因此不创建全局范围变量)和不同的样式函数声明。
答案 2 :(得分:1)
// this function can accept just literal object
没有。该函数不关心参数对象是如何构造的。
你可以做到
obj = {};
key = "k1";
obj[key] = true;
fn(obj);
答案 3 :(得分:1)
另一个只接受像参数这样的文字对象的函数。
没有这样的事情。在创建它之前,使用文字创建的对象与使用其他方式创建的对象之间没有区别。
for (key in obj1) {
obj = [];
var foo = {};
foo[key] = true;
fn (foo);
};
答案 4 :(得分:0)
可以尝试一下吗?
for (key in obj1) {
var obj = {};
obj[key] = true;
fn (obj);
};