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

时间:2012-12-11 15:28:23

标签: 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(in in array))从info创建表时,我将每行推入一个名为 rowsHolder 的数组中,并为tr赋予一个属性记录-ID = “i” 的。然后当用户点击该行时,我会调用您在上面看到的方法。我正在使用PhoneGap和JQuery Mobile。

一如既往,感谢输入

-D

1 个答案:

答案 0 :(得分:2)

这里绝对没有理由使用eval

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