Answers:
如果使用,您将更容易受到攻击eval
:JSON是Javascript的子集,而json.parse仅解析JSON,而eval
这却为所有JS表达式敞开了大门。
eval('alert(1)');
。
所有JSON.parse
实现最有可能使用eval()
JSON.parse
基于Douglas Crockford的解决方案,该解决方案eval()
在497行使用。
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
的优点JSON.parse
是它可以验证参数是否为正确的JSON语法。
JSON.parse()
在Linux Mint系统上的Firefox 28和Chromium 33中进行了测试。它的速度是eval()
Firefox的2倍,而Chromium是4倍。我不确定您要发布的源代码,但是在我的浏览器中它们不是同一回事。
并非所有浏览器都具有本机JSON支持,因此有时您需要使用eval()
JSON字符串。使用http://json.org中的 JSON解析器,因为它可以为您轻松处理所有事情。
Eval()
是邪恶的,但是对某些浏览器来说却是必然的邪恶,但是在可以避免的地方,请这样做!!!!
JSON.parse()和eval()接受的内容有所不同。尝试评估:
var x =“ {\” shoppingCartName \“:\” shopping_cart:2000 \“}”
eval(x) //won't work
JSON.parse(x) //does work
请参阅此示例。
JSON只是JavaScript的一个子集。但是会eval
评估完整的JavaScript语言,而不只是JSON子集。
JSON.parse
(直接实现到JavaScript引擎中)仅解析JSON。但是其他非本地实现使用一些完整性检查,然后eval
出于性能原因使用。
JSON.parse
比快eval
。来源。