JS混淆后代码报错怎么排查?

UE丶郭云 阅读 15

我用在线工具把一段JS代码混淆了,结果在浏览器里直接报错,控制台显示Uncaught SyntaxError: Unexpected token '}',但原代码明明能正常运行啊。

混淆前的代码是这样的:

function getUserInfo(id) {
  if (id > 0) {
    return { valid: true, id: id };
  }
  return { valid: false };
}

混淆后变成了一堆字母和符号,看起来像这样:function a(b){if(b>0)return{valid:!0,id:b};return{valid:!1}};。虽然肉眼看着没问题,但一运行就崩,是不是混淆工具把某些语法搞错了?该怎么调试这种问题?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
技术闪闪
先检查一下混淆后的代码有没有被意外插入了多余字符,比如换行符、BOM头或者不可见的 Unicode 字符,有些在线工具会偷偷加点“美化”或者注释,导致语法解析出错。
你可以把混淆后的代码复制进 VS Code 或记事本,切换成“显示所有字符”模式(比如 VS Code 里按 Ctrl+Shift+P 输入 “Render Whitespace” 开启),看看有没有多出来的空格、制表符或者换行。

如果看起来干净,再把混淆后的代码手动格式化一下,比如粘到浏览器控制台里,用 prettier 或者在线格式化工具排版,看花括号、括号是不是成对闭合的。
你贴的那段混淆代码本身没问题:function a(b){if(b>0)return{valid:!0,id:b};return{valid:!1}},但实际混淆工具可能在前后加了分号、注释、或者把换行删掉后没加分号导致和前/后代码粘连,比如前面是 var x=1 没分号,后面直接跟混淆代码,浏览器会解析成 var x=1function a(b)...,直接语法崩。

建议临时做法:把混淆后的代码单独用一个 <script> 标签包起来,别和其他脚本混在一起,先确保它单独能跑通。
如果还是崩,换工具试试,比如 UglifyJSTerser 或者 JavaScript Obfuscator 的 CLI 版本,有些在线工具为了“安全”会加额外的保护逻辑,反而引入 bug。

最后记住:混淆后务必在压缩前先跑一遍单元测试,别等上线才发现这种低级错误。
点赞 1
2026-02-24 16:45