javascript使用var值作为新var的名称

时间:2014-03-12 18:40:46

标签: javascript

如何使用数组键(文本值)以相同的名称引用变量?

jsFiddle

var cr,au,gen,bn,fmt,str;
var sbASCtrls = {"cr":"ContentRating","au":"Gold","gen":"Gender","bn":"Big Number","fmt":"Format","str":"Starting String"};

for (var key in sbASCtrls){

    //This does not work ... breaks script
    "'"+key+"'" = sbASCtrls[key];

    alert('var CR: ' + cr);
    return false;
}

在另一种语言中,我只是用百分号包围var名称,因此:

var %key% = "bob";

会:

var cr = bob;

如何在javascript中完成?


为什么我需要这个不寻常的解决方案:

正在对预先存在的PHP处理器文件进行一系列AJAX调用,该文件需要HTML中的所有数据。在这种情况下,我已经有了JSON / jsObj格式的数据,并希望快速将其分解为单独的变量。使用eval()实现了最有效/可读(相信与否!)的代码。在阅读了Jonathan和Niet的帖子/评论后,我一直在努力解决如何将数据保存为JSON格式并使用它,但AJAX处理器总是需要HTML格式的一段数据。令我失望的是,我无法找到混合两种数据类型的方法。面对重新编码整个应用程序以仅使用JSON或继续使用HTML的选择,SDLC为我做出了决定。

感谢Niet,Jonathan,Cristy,Stephen Thomas和Fallenreaper提供了良好的建议和好主意。我将确定您已制作的其他帖子。

3 个答案:

答案 0 :(得分:4)

虽然可以使用eval,但是这样:

// DO NOT DO THIS
eval(key+" = svASCtrls[key];");

你应该停下来问问自己为什么要这样做。你已经拥有一个非常整洁的物体,所以只需使用它......

答案 1 :(得分:1)

您可以将变量定义为对象的属性

var obj = { cr: null, au: null, gen: null, bn: null, fmt: null, str: null };
var sbASCtrls = {"cr":"ContentRating","au":"Gold","gen":"Gender","bn":"Big Number","fmt":"Format","str":"Starting String"};

for (var key in sbASCtrls){

    //This does not work ... breaks script
    obj[key] = sbASCtrls[key];

    alert('var CR: ' + obj.cr);
    return false;
}

答案 2 :(得分:1)

由于任何全局变量都是window对象的子项,因此您可以在window[key]

创建变量
for (var key in sbASCtrls){
    alert("key: " + key);
    alert("val: " + sbASCtrls[key] );

    //This should work, but jsfiddle messes with the window object
    window[key] = sbASCtrls[key];


    alert('var CR: ' + cr);
    return false;
}

请注意,这不适用于jsfiddle,但应该适用于您的网站。