JS混淆后代码报错怎么排查?
我用在线工具把一段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}};。虽然肉眼看着没问题,但一运行就崩,是不是混淆工具把某些语法搞错了?该怎么调试这种问题?
你可以把混淆后的代码复制进 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>标签包起来,别和其他脚本混在一起,先确保它单独能跑通。如果还是崩,换工具试试,比如
UglifyJS、Terser或者JavaScript Obfuscator的 CLI 版本,有些在线工具为了“安全”会加额外的保护逻辑,反而引入 bug。最后记住:混淆后务必在压缩前先跑一遍单元测试,别等上线才发现这种低级错误。