【发布时间】:2015-12-16 21:17:46
【问题描述】:
我有一个完全正确的 Json 字符串,它通过使用 eval 函数在函数的方法中进行解析。但是,完成此操作后,由于某些未知原因,全局定义方法的第一行作为数组参数之一被注入内部。
被解析的字符串是:
{"id":1,"name":"object1","volume":15,"weight":100}
解析行是:
var 解码 = eval('(' + 编码 + ')');
使用 eval() 函数解码后,我在里面得到了“互补”属性 decoded['replaceNode'],它包含一个包含在另一个文件中的全局范围函数。
我认为这是一个错误,但由于在 firefox 和 safari 中都会发生同样的情况,因此似乎不太可能。更可能我误解了 eval 的目的。
提前感谢您的帮助。
【问题讨论】:
-
你有与 Object.prototype 混淆的代码吗?这可以使所有对象都具有附加属性。
-
事实是,
eval有一个用途:将字符串作为 JS 代码运行。不解析 JSON,不解析任何东西。 执行任意字符串。它不知道也不关心字符串即代码会做什么,如果你也不知道,你就是在给你的网站一些笨蛋控制权。如果您的 JSON 确实正确,则可以改用JSON.parse。现在,它已内置于每个体面的浏览器中。
标签: javascript json parsing eval