【发布时间】:2013-11-05 20:42:03
【问题描述】:
我听到很多关于 eval 函数是多么“邪恶”甚至是“误解”的传言,所以我决定从我的代码中删除它。问题是我不知道用什么替换它。
这是我当前代码的简要说明。我在开始时声明了一系列数组(以下示例中只有 2 个),然后基于按钮单击其中一个被加载到传递给函数的变量中。
这是一些基本的 HTML
<div class="button" data-name="button1">Button1</div>
<div class="button" data-name="button2">Button2</div>
和 JS(使用 jQuery)
var butName = null;
var eArray = null;
var button1Logo = ["..path/to/pic1.png","..path/to/pic2.png"];
var button2Logo = ["..path/to/pic3.png","..path/to/pic4.png"];
$(".button").mouseup(function(){
/*give a butName*/
butName = $(this).attr("data-name");
/*give the array from the button*/
eArray = eval(butName + "Logo");
});
这样做会将数组分配给变量,而不仅仅是一个显示“butnameLogo”的字符串,这就是我使用 eval 的原因。但我希望摆脱这种情况。
我知道我可以向 html 添加一个新属性,然后为变量检索该属性,但我不想添加更多 html,因为我可以使用 JS 来完成。
我也尝试过制作一个加载了字符串的对象,如以下答案所示:https://stackoverflow.com/a/16038097/1621380 但这导致再次只是一个字符串,而不是分配变量。
想知道各位聪明人有没有更好的建议!
【问题讨论】:
-
这是被问到最多的问题之一,但通常细节较少......
-
您得到的答案将与您在其他问题中找到的答案相同。
-
当你遇到一个系列时,把它做成一个数组(hashmap)!
-
只是一个你可能感兴趣的快速提示——jQuery 解析任何数据属性——所以你可以使用
$(this).data("name")代替$(this).attr("data-name")(并使用$(this).data("name", "new value")设置它)。它甚至根据需要将其从字符串转换为数字/对象/数组。总有一天可以帮到你。文档:(jQuery Docs)
标签: javascript jquery arrays eval