javascript – JSON.parse()在内部使用eval()吗?

前端之家收集整理的这篇文章主要介绍了javascript – JSON.parse()在内部使用eval()吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > What is JSON.parse written in / Is it open source?4个
现代浏览器中的JSON.parse是否在内部使用eval()来评估和执行动态代码

因为我一直在浏览Douglas Crockford的JSON库.它在使用parse()时也使用eval(),但在实际评估之前进行预处理.如:-

>代码中针对Unicode字符的墙.
>代码显示恶意.

支持JSON.parse的现代浏览器本身是执行此操作还是遵循其他协议?

解决方法

不,JSON.parse()不使用eval()

这是设计,因为eval()能够执行任何您提供的任意JavaScript代码,它可以执行您不希望它执行的操作.因此,JSON.parse()执行它在锡上所说的内容:它实际上解析整个字符串并重建整个对象树.

JSON.parse通常委托给用“本机”代码实现的内部函数,其中“native”表示在浏览器的javascript引擎的上下文中被认为是“本机”的(可以是编译的机器代码,可以是VM的字节码,等等…).我不认为对此有任何强烈要求.

实施的差异?

JSON(符号)本身由RFC4627编纂.

关于JSON对象及其方法的实现,所有现代浏览器的实现应该表现相同,因为它们应该遵循ECMAScript 5 JSON object的相同规范.但是,总是存在潜在缺陷的可能性.例如,V8最初包含此nasty bug.

另请注意,上面注释中列出的实现是为了向本机不支持它的浏览器添加JSON.parse()支持(也称为“有时需要支持的这些该死的旧浏览器”).但这并不意味着它们必然是如何实现它的.

例如,对于Chrome中使用的Google V8实现,请参阅json.js,它从json_parser.h调用本机代码.

猜你在找的JavaScript相关文章