将字符串评估为对象(javascript)

时间:2010-10-19 14:03:46

标签: javascript

以下是问题字符串:

$.ajax(......
   ,success:function(msg){
      var obj = eval('['+msg.d+']');
   },
   ....
}

msg.d包含以下内容:

new Person(2, 'Name Surname','This is just string came from Par'is at Sat'urday');

如何传递javascript问题?

5 个答案:

答案 0 :(得分:5)

如果字符串确实如您所引用的那样,则会出现语法错误并且无法正常工作(在“星期六”一词中有错误的')。但是,如果您将[调用中的括号(]eval)更改为括号(()):

var obj = eval('('+msg.d+')');

但是,实际上几乎从来没有必要这样做(或者根本就是使用eval)。几乎总是可能的,也是可取的,稍微重构并避免它。

如果这是您的代码的字面引用,请参见dvhh's answer below,您的函数参数名称(msg.d)无效。

答案 1 :(得分:1)

在这种情况下使用eval实际上非常危险。你真的应该使用XML或JSON。 (这就是他们称之为AJAX的原因。)

答案 2 :(得分:1)

函数参数应该是有效的javascript标识符

尝试将msg.d更改为msg_d,例如

答案 3 :(得分:1)

您可能需要转义字符串,因为此示例正常工作:

function MyObject(myvar){
    this.hello = function(){
        alert('myvar= ' + myvar);
    };
}

var obj1 = new MyObject('hello');
obj1.hello();

var obj2 = eval("new MyObject('world')"); 
obj2.hello();

(编辑:顺便说一下,我认为msg.d是因为在StackOverflow上发布之前编辑了snipplet而导致的错字?)

答案 4 :(得分:0)

出于安全考虑,我会避免使用eval()。如果用户可以将恶意代码导入数据库,则有可能最终导致此eval表达式,从而对访问此页面的任何人造成严重破坏。

我建议从AJAX请求中返回JSON,而不是使用eval。然后,您可以轻松地解析值并使用该数据构建新的Person对象。