如在該示例安全使用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
爲什麼你需要評估?如果由於某種奇怪的原因需要一個字符串作爲對象鍵,請使用toString()。 – adeneo
我不清楚'id'中包含什麼樣的值。它只是數字嗎?或變量名?或者像「obj.foo.bar.baz」這樣的長鏈接? – apsillers
只是'rowsHolder [id]'有什麼問題? – deceze