Javascript 安全地使用eval将变量用作对象名
如本例所示 我使用eval来使用DOM属性从数组中选择元素。虽然用户无法直接更改输入,但我希望尽可能安全,并确保在计算变量之前,该变量确实是一个整数 以下哪一项是最好、最安全的方法Javascript 安全地使用eval将变量用作对象名,javascript,arrays,object,eval,Javascript,Arrays,Object,Eval,如本例所示 我使用eval来使用DOM属性从数组中选择元素。虽然用户无法直接更改输入,但我希望尽可能安全,并确保在计算变量之前,该变量确实是一个整数 以下哪一项是最好、最安全的方法 $(".listitem").click(function(){ var id = $(this).attr("record-id"); if(!isNaN(new Number(id))){ Storage.search.nearby.currec = rowsHolder[eva
$(".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
}
});
或
更多信息,但非必需信息:
基本上,我是从网上下载一个大的JSON字符串,其中包含一个记录数组。在使用for语句(for(i in array))从info构建表时,我将每一行推入一个名为rowsHolder的数组,并给tr一个记录id=“i”的属性。然后,当用户单击该行时,我调用上面看到的方法。我正在JQuery Mobile上使用PhoneGap
一如既往,感谢您的投入
-D这里绝对没有理由使用
eval
- 如果您的
是一种数字,请使用id
获取它。不必要,因为当用作属性名时,它会转换回字符串parseFloat(id)
- 如果您的
是一个整数,请使用id
获取它。不必要,因为当用作属性名时,它会转换回字符串parseInt(id,10)
- 如果您的
是一个字符串,就让它成为一个字符串吧。您使用它的属性名无论如何都是一个id
id
中会包含哪些类型的值。只是数字吗?还是变量名?或者长成员链,比如obj.foo.bar.baz
?仅仅rowsHolder[id]
有什么问题?@deceze-rowsHolder[id]给了我未定义的-我假设id不是变量,而是字面上的“id”,但是eval(id)给了我对象ineed@apsillers-id将包含数组键0、1、2。。。n尽管我无法调试以查看错误,但行Storage.search.currec.record=rowsHolder[parseInt(id)];中断脚本,使单击事件不会发生任何事情。Storage.search.currec.record=rowsHolder[eval(id)];很好,但我不得不使用eval的原因,在我看来,是因为——就像Bergi在上面说的那样——脚本认为我在尝试查找名为“id”的对象属性,而实际上我在尝试查找名为“0”或“3”的数组键(或对象属性)或变量中名为“id”的任何内容。如果变量id
包含数字0
或字符串“0”
,它将工作并返回对象{“id”:“00088”}
哦,你是Bergi-对不起,我没有看。你是对的,你的建议根本不需要使用eval。谢谢。是的,:-)那么给我们看更多的代码,也许是那些.listitem
s的标记
$(".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
}
});