Eval参考错误

时间:2012-07-06 15:29:01

标签: javascript json

在javascript中我正在建立一个像这样的字符串......

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: " + userName + "}";

这是后来通过这样的eval语句......

var obj = eval('(' + txt + ')');

发生这种情况时,我收到一条引用错误,指出用户名变量的值未定义。

有谁知道这个的原因?我错过了一些简单的东西吗?

2 个答案:

答案 0 :(得分:1)

您在用户名变量周围缺少引号:

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}";

我假设您要在userName变量中存储用户名的字符串值。由于没有引用,因此将username的值视为变量。例如,如果用户名为“testValue123”,则为userName: testValue123而不是userName: 'testValue123'

答案 1 :(得分:0)

如果jQuery可用,我建议使用$.parseJSON()方法代替eval()

<强> jQuery的:

$(function(){
    var userName = 'me';

    var txt = '{"authenticationToken": 1, "authenticated": 2, "authenticationTokenExpiry": 3, "sessionTimeoutMinutes": 4, "userName": "' + userName + '"}';

    var obj = $.parseJSON(txt);
});

注意:必须修改字符串以满足格式良好的JSON字符串的要求

演示:http://jsfiddle.net/WTC7k/

但是,您遇到错误userName的值未定义的原因是您必须将字符串括在引号中以允许eval()正常工作:

var userName = 'me';

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}"; 

var obj = eval('(' + txt + ')'); 

演示:http://jsfiddle.net/9rtgK/