JavaScript 格式化
在线美化或压缩 JavaScript 代码,支持一键复制。
点击格式化后结果显示于此
快速示例
点击加载示例代码体验格式化效果
关于 JavaScript 格式化工具
JavaScript 格式化工具支持两种模式:美化(Beautify)和压缩(Minify)。美化模式自动添加缩进和换行,让代码更易读;压缩模式去除所有空白和注释,生成最小体积的代码。
此工具使用纯前端实现,无需安装任何依赖,代码不会上传到服务器。支持双向操作:美化后的代码可再次压缩,压缩后的代码也可再次美化。
使用步骤
- 在输入框中粘贴要处理的 JavaScript 代码
- 选择「美化」或「压缩」模式,点击格式化按钮
- 查看结果,点击「复制代码」按钮复制到剪贴板
典型生产场景
CI/CD 流水线代码规范检查
在 GitLab CI 或 GitHub Actions 中将格式化工具作为质量门禁:若代码通过 git diff 检测到风格不一致,自动运行美化器并生成差异报告。对小型项目或脚本库,这比部署 Prettier + ESLint 更轻量。
代码审查 (Code Review) 预处理
审查前对混乱缩进的 PR 代码先执行美化,让 diff 聚焦逻辑变更而非格式噪音。也可以作为 pre-commit hook 的一部分,在提交前自动统一格式。
第三方脚本安全审计
美化混淆或压缩的第三方 SDK/追踪脚本,检查是否有可疑行为(如访问 document.cookie、发送 beacon 请求)。格式化后代码可读性大幅提升,方便安全团队逐行审查。
浏览器 Console 代码片段整理
从浏览器 DevTools 复制出的压缩 JS 往往挤在一行。粘贴到工具中一键美化,快速理解代码逻辑后修改并重新压缩,再贴回 Console 或 Tampermonkey 执行。
生产日志中的内联 JS 提取与还原
生产环境错误日志常包含压缩的内联 JS 堆栈片段(如 onerror 中的代码)。提取这些片段后格式化还原,结合 source map 定位原始文件位置,加速故障排查。
Webpack/Vite 打包产物对比分析
打包前后的 JS 代码体积和逻辑结构差异巨大。对 bundle 分别美化后,用 diff 工具对比,直观看出 tree-shaking 效果、模块合并方式和代码分割边界。
JavaScript 格式化引擎的边界与取舍
本工具基于逐字符状态机实现,不构建 AST。这意味着它在处理 JavaScript 语法时有一套明确的边界和取舍。理解这些边界,能让你在生产环境中用对场景、避开陷阱。
自动分号插入 (ASI) 的处理策略
JavaScript 会在换行处自动插入分号,但并非所有换行都会触发 ASI。本工具的格式化引擎在 return、throw、break、continue、++、-- 等关键字后的换行处保留分号语义,避免因格式化引入逻辑变更。但在 [ 和 ( 开头的行首场景中,引擎不会自动添加保护性分号——如果代码依赖 ASI 来避免 (function(){})() 被解析为函数调用,建议格式化后检查这些位置。
模板字符串与标签模板的格式化挑战
模板字符串内的空白是有意义的——缩进和换行直接构成字符串内容的一部分。格式化引擎不会修改模板字符串内部的任何字符,包括缩进。这意味着如果模板字符串跨行且包含大量缩进,美化后模板内部的缩进保持不变,可能与外部代码缩进不协调。标签模板(如 styled-components 的 css 标签)同样不处理,以免破坏 DSL 语义。
正则表达式字面量的歧义处理
/ 在 JavaScript 中既是除法运算符也是正则表达式的起始符,这在逐字符解析中是经典歧义。本工具通过上下文推断:若 / 出现在表达式期望位置(如 =、(、return 之后),视为正则起始;否则视为除法。这个策略覆盖约 95% 的实际场景,但在 a / b / c 这类连续除法表达式中可能被误判。如果正则被错误格式化,可以用 new RegExp() 构造函数形式规避。
常见错误模式
误以为美化器会修复语法错误
美化器不做语法检查——如果输入的代码有 SyntaxError,输出仍然有 SyntaxError。它只负责格式调整,不是 linter。垃圾进,垃圾出。先确保代码能正常运行,再进行格式化。
压缩模式下期望保留指令注释
压缩模式会删除所有注释,包括带特殊语义的指令注释(如 // @ts-check、// @ts-ignore、// eslint-disable)。如果需要保留这些指令,请在压缩后手动添加,或用自定义标记在预处理阶段保护它们。
对内联正则的代码反复美化与压缩
包含等号的正则字面量(如 /=/g、/<=/g)在美化→压缩循环中,可能因空格的重添加和删除导致 /= /g 或 / =/g 等非预期结果。建议在格式化前将复杂正则提取为变量,或使用 new RegExp() 构造函数形式。
依赖 ASI 语义但未声明 use strict
压缩模式去掉换行后,依赖 ASI 的代码(如 return 后直接换行返回 undefined)可能改变行为。开启 use strict 并始终显式使用分号,是从根源上避免此类问题的最佳实践,也是绝大多数生产级项目的规范。