javascript - 替代使用 eval()

标签 javascript jquery arrays eval

我听到很多关于 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但这只会再次产生一个字符串,而不是分配一个变量。

不知道各位高手有没有更好的建议!

最佳答案

替换

var button1Logo = ["..path/to/pic1.png","..path/to/pic2.png"];
var button2Logo = ["..path/to/pic3.png","..path/to/pic4.png"];

使用对象,其中键是您的按钮名称:

var buttonLogos = {
    button1: ["..path/to/pic1.png","..path/to/pic2.png"],
    button2: ["..path/to/pic3.png","..path/to/pic4.png"]
};

然后你可以简单地做而不是eval

eArray = buttonLogos[butName]

(或 buttonLogos[butName + "Logo"] 如果你想调用键 button1Logobutton2Logo,但我不能现在真的明白了,它们很好地包含在 buttonLogos 对象中)

关于javascript - 替代使用 eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798555/

相关文章:

javascript - div float 在旋转木马顶部的问题

javascript - HTTP 获取 Angular 1.5 组件

javascript - Node.js 中的 Google map 几何库

javascript - 将图片动态添加到 Photoswipe

javascript - Jquery - 获取 DOM 中元素的位置

javascript - 旋转 1 圈后暂停 SVG 动画

c - 使用 strtok 存储数组

javascript - 检查警报是否被禁用

javascript - tensorflow.js 有没有办法输入一个以 -1 作为形状值之一的形状

ios - Swift - 如何检查 map 注释(pin)是否在数组内?