关联数组在JavaScript中与eval()不起作用
我正在生成一个用Python字典表示的数据,这些数据通过简单的json格式从一个网址获取,格式如下。
{"2": "London", "3": "Tokyo", "4": "Sydney"}
我使用了 $.get
方法,并把结果存储在一个变量中,叫做data。可是当我用 eval(data)
时,并没有生成一个关联数组,反而出现了错误。这是什么问题呢?有什么解决办法吗?
补充:我已经分享了代码,链接在这里:http://dpaste.com/570901/
5 个回答
6
我们需要看到更多的代码...
var x = '{"2": "London", "3": "Tokyo", "4": "Sydney"}';
eval('var y = ' + x);
// or
var y = eval('(' + x + ')');
console.log(y);
console.log(y["2"]);
上面的代码运行得很好。你到底在做什么/没做什么呢?
另外,不管怎样,你都不应该使用 eval
,但了解它是怎么工作的还是很重要的。
9
你的错误是因为在语句开头的一个 {
被当作代码块来理解(就像你在 if
和 for
中使用的那种),而不是当作一个对象字面量。你可以加上括号,这样 eval 就能按照你想要的方式执行:
eval('(' + str + ')');
当然,eval 是个坏东西,你应该使用像 JSON.parse
这样的东西。大多数新浏览器都有这个功能,它不仅更安全,而且更快。
2
eval
这个东西很慢,不够高效,而且不容易调试。尽量不要用它。
让你的脚本输出一个 application/json
的内容类型头,jQuery会自动把JSON转换成JavaScript对象。