javascript - 安全地使用 eval 将变量用作对象名称

标签 javascript arrays object eval

如本例所示

javascript-use-variable-as-object-name

我正在使用 eval 来使用 DOM 属性从数组中选择一个元素。尽管用户没有直接的方法来更改输入,但我希望尽可能安全,并在评估变量之前确保变量确实是整数。

以下哪项是最好、最安全的方法?

$(".listitem").click(function(){
    var id = $(this).attr("record-id");
    if(!isNaN(new Number(id))){
        Storage.search.nearby.currec = rowsHolder[eval(id)];
    }else{
        // send email to admin, shut down
    }
});

$(".listitem").click(function(){
    var id = $(this).attr("record-id");
    if(parseInt(id)){
        Storage.search.nearby.currec = rowsHolder[eval(id)];
    }else{
        // send email to admin, shut down
    }
});

更多但非必需信息:

基本上,我从网上拉取一个大的 JSON 字符串,其中包含一组记录。使用 for 语句 ( for(i in array) ) 从信息构建表后,我将每一行插入名为 rowsHolder 的数组中,并为 tr 赋予属性record-id="i"。然后,当用户单击该行时,我调用您在上面看到的方法。我正在将 PhoneGap 与 JQuery Mobile 结合使用。

一如既往,感谢您的投入

-D

最佳答案

这里绝对没有理由使用eval

  • 如果您的 id 是数字,请使用 parseFloat(id) 获取它。没有必要,因为当用作属性名称时它会被转换回字符串。
  • 如果您的 id 是整数,请使用 parseInt(id, 10) 获取它。没有必要,因为当用作属性名称时它会被转换回字符串。
  • 如果您的id是一个字符串,就让它成为一个字符串。无论如何,您使用它的属性名称都是一个。

关于javascript - 安全地使用 eval 将变量用作对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13823036/

相关文章:

javascript - 在 Nodejs Express 模块处理所有事件之前发送响应

arrays - 如何在Linux中使用带有多个变量的for循环

java - 二维数组的 Sigmoid 函数

C - 结构内静态字符数组上的 sizeof() - 不可能?

javascript - 获取类的函数引用(不是对象)

javascript - 为什么 JSON.stringify 不显示作为函数的对象属性?

javascript - Angular2 路由与 Express 路由结合使用?

javascript - Bootstrap 模式无法显示图像

javascript - JS改变部分段落的文字颜色

java - 程序永远找不到扫描仪