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

pvn*_*ula 6 javascript jquery parsing json ecmascript-5

JSON.parse现代浏览器是否在eval()内部用于评估和执行动态代码?

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

  1. 代码中的Unicode字符的墙.
  2. 代码显示恶意意图.

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

hay*_*lem 9

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

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

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

实施的差异?

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

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

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

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