eval 执行字符串为 javascript 代码,具全权限且不区分数据与代码;json.parse 仅严格解析标准 json,拒绝非法语法和执行逻辑,安全性更高。

eval 执行上下文与 JSON.parse 的安全性对比,核心在于:前者会把字符串当作 JavaScript 代码执行,后者只做纯数据解析。
eval 是全权限执行,不区分“数据”和“代码”
eval 接收任意字符串,直接在当前作用域中求值。这意味着:
- 它能访问并修改当前作用域里的变量(比如
++age、alert(1)) - 它会执行内嵌的函数调用、赋值、跳转甚至重定向(如
window.location = "xxx") - 只要语法合法,哪怕不是标准 JSON,也能运行(比如单引号、省略引号、尾逗号)
- 必须手动加括号包裹,否则
{}被识别为代码块而非对象字面量
JSON.parse 是严格的数据解析器,只认标准 JSON
JSON.parse 不执行任何逻辑,只按 JSON 规范校验并转换:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 属性名和字符串值必须用双引号,不能是单引号或不加引号
- 不允许 JS 表达式(如
++age、alert()、function(){}) - 数值不能有前导零,小数点后必须有数字
- 遇到非法字符或结构立即抛错,不会静默失败
第三方数据场景下,eval 可能导致严重安全问题
当接收来自用户输入、API 响应或外部脚本的 JSON 字符串时:
- 攻击者可在字段值中注入恶意代码(如
"name":"<img src="https://img.php.cn/?x-oss-process=image/resize,p_40" alt="eval 执行上下文与 JSON.parse 的安全性对比">") - eval 会执行这段 HTML/JS,造成 XSS 或凭证泄露
- JSON.parse 会在解析阶段就报错,天然阻断这类攻击
- 即使数据来源可信,也建议统一用 JSON.parse,避免未来引入不可控输入时埋下隐患
兼容性与替代方案
现代浏览器均原生支持 JSON.parse(IE8+),无需额外 polyfill。若需支持极旧环境:
- 可用 json2.js 提供 fallback
- jQuery 的
$.parseJSON()在 jQuery 3.0+ 中已废弃,内部也转向 JSON.parse - 不要用 eval 替代——安全风险远大于兼容收益










