参见英文答案 >
What is JSON.parse written in / Is it open source?4个
现代浏览器中的JSON.parse是否在内部使用eval()来评估和执行动态代码?
现代浏览器中的JSON.parse是否在内部使用eval()来评估和执行动态代码?
因为我一直在浏览Douglas Crockford的JSON库.它在使用parse()时也使用eval(),但在实际评估之前进行预处理.如:-
支持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调用本机代码.