开发者

Escaping in eval's argument

I'm using eval to assign dynamic object's 开发者_如何学Cproperties.

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+"'");

then I'm using this object as post data during ajax request.

Everything is ok, but as well known eval is not safe function and I should escape property_value_1, property_value_2. For example, property_value_2 = "<a href=''>Yahoo!</a>" will cause error.

What is the best way to do it?

Thank you


The best way is to not use eval at all:

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

If you still want to, you have to escape apostrophes and backslashes to put the values in string literals:

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

(If you surround the literal string with quotation marks instead of apostrophes, you have to escape quotation marks and backslashes.)


Is eval really needed?

Based on your example you could simply do:

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

If this isn't a solution for you for whatever reason, go on about escaping quotes with \.


Try:

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


I know this is an old question, but for completeness there is an extra answer not considered before.

With modern JS you can create an object similarly to what @Kalinin wanted to do, but with the desired result (note the [] around properties names):

var obj = {
    [property_name_1]: property_value_1, 
    [property_name_2]: property_value_2
};


I would use the object literal:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜