javascript
2010-10-19 46 views 3 likes 
3

我使用eval來分配動態對象的屬性。eval的參數轉義

property_name_1 = property1; 
property_name_2 = property2; 
property_value_1 = 1; 
property_value_2 = 2; 
var obj = new Object; 

eval("obj."+property_name_1+"='"+property_value_1+"'"); 
eval("obj."+property_name_2+"='"+property_value_2+"'"); 

然後我在ajax請求期間使用這個對象作爲發佈數據。

一切都很好,但衆所周知eval不是安全的功能,我應該逃脫property_value_1,property_value_2。例如,property_value_2 = "<a href=''>Yahoo!</a>"將導致錯誤。

這樣做的最佳方法是什麼?

謝謝

回答

5

,最好的辦法是不使用eval都:

obj[property_name_1] = property_value_1; 
obj[property_name_2] = property_value_2; 

如果你仍然想,你已經逃脫單引號和反斜線放值在字符串中:

eval("obj." + property_name_1 + "='" + property_value_1.replace(/\\/g,'\\\\').replace(/'/g,"\\'") + "'"); 
eval("obj." + property_name_2 + "='" + property_value_2.replace(/\\/g,'\\\\').replace(/'/g,"\\'") + "'"); 

(如果用引號而不是撇號括住文字字符串,則必須使用引號和反斜槓。)

+0

非常好,謝謝! – Kirzilla 2010-10-19 11:42:38

0

是否真的需要eval

根據您例如,你可以簡單地做:

obj[property_name_1] = property_value_1; 
obj[property_name_2] = property_value_2; 

如果這是不適合你無論出於何種原因的解決方案,繼續與有關轉義\報價。

0

嘗試:

var obj = new Object(); 
obj[property_name] = property_value; 
-1

我會使用對象字面:

var obj = { 
    property_name_1: property_value_1, 
    property_name_2: property_value_2 
}; 
+0

property_name_1和2很明顯是變量,但是像上面這樣的對象字面聲明,對象鍵將*字面上*爲字符串「property_name_1」和「property_name_2」。實際上,這和'var obj = {「property_name_1」:property_value_1,「property_name_2」:property_value_1}沒有任何區別' – 2012-04-17 07:37:42

+0

這是我學會了艱難的方式......您需要使用obj [property_name_1]語法 – 2012-04-17 07:39:35

相關問題