【发布时间】:2014-03-12 18:40:45
【问题描述】:
如何使用数组键(文本值)来引用同名的变量?
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 的帖子/cmets 之后,我为如何将数据保留为 JSON 格式并像这样使用它而苦苦挣扎,但是 AJAX 处理器总是需要 HTML 格式的数据。令我失望的是,我无法找到混合这两种数据类型的方法。面对重新编码整个应用程序以仅使用 JSON 或继续使用 HTML 的选择,SDLC 为我做出了决定。
感谢 Niet、Jonathan、Cristy、Stephen Thomas 和 Fallenreaper 提供的中肯建议和好主意。我将确定你们各自发布的其他帖子的范围。
【问题讨论】:
-
如果你真的想这样做,你必须使用
eval(),否则 JavaScript 不支持动态标识符。但是,typical suggestion is to use an object instead,你已经拥有了。那么,为什么不把它作为一个对象来获取/设置你想要的属性呢? -
我不会这样做。即使您设法使其正常工作,但在公开发布某些内容时,缩小会使其更小更快地加载到页面上,因此无关紧要。
标签: javascript