JavaScript 缩进美化
格式化所有处理都在浏览器本地完成,数据不上传服务器
输入
输出
把压缩成一行的 JavaScript 按大括号与分号重新排版:代码块逐层缩进、语句各自成行、} else { 保持一体、短对象字面量留在同一行。它只做缩进,不做语法解析 —— 正则字面量里的括号、模板字符串里的表达式都不参与结构判断,所以结果在这一类写法上可能不准。字符串与注释的内容一律原样搬运,除空白之外不改动任何字符,也不会插入或删除分号。
功能
- 按大括号层级缩进,} 退回到对应的层级
- 分号断行;for (;;) 里的分号是分隔符,不断行
- } else {、} catch {、} finally { 保持在同一行
- 对象字面量保持单行(内容里没有分号且不长),代码块展开
- 类体一定展开成多行
- 字符串、模板字符串(含嵌套模板与 ${} 表达式)、注释的内容原样保留
- 行注释后强制断行,后面的代码不会被注释吃掉
- 只在语法上无歧义的位置补空白:逗号之后、控制关键字与括号之间
- 不改动运算符周围的空白,不插入也不删除分号
- 已知限制:不做词法分析,正则字面量里的括号会被当成结构括号
使用方法
- 把 JavaScript 粘贴进输入框
- 选择缩进宽度
- 按 Ctrl/⌘ + Enter 或点「运行」
- 点「复制」取走结果
常见问题
- 为什么正则字面量会让结果错位?
- 分不清 / 是除号还是正则开头,需要一整套词法分析(还要处理一元与二元运算符),判断错了会把后面整段代码当成正则吞掉。与其做错,不如把限制写清楚:正则里出现 { } ( ) 时缩进可能不准。
- 运算符周围的空格为什么没有补齐?
- 给 a=b 补空格要先分清一元与二元运算符(a - -b、i++、x=-1),那属于词法分析的范围,猜错会改动代码的含义。这个工具只做缩进,保证不会因为猜错而改坏代码。
- 会改变代码的运行结果吗?
- 除空白之外不改动任何字符 —— 分号、括号、运算符、字符串内容一个都不动。可以用「把空白全部去掉再比对」的办法自己核对。
- 代码会被上传吗?
- 不会。全部处理在浏览器内存里完成,页面不发任何请求,断网也能用。
相关工具
CSS 格式化
格式化在线 CSS 格式化与压缩:规则块展开、声明逐行、选择器列表一项一行,压缩只删结构位置的空白,保留 margin: 0 auto 这类有语义的空格。
JSON 格式化
格式化在线 JSON 格式化与校验工具,支持格式化、压缩、语法错误定位到具体行列、键名递归排序。所有解析都在浏览器本地完成,数据不上传服务器。
JSON 转代码
格式化把 JSON 样本转成 TypeScript interface、Go struct、Java class 或 Rust struct:不齐的键标成可选、类型冲突退化为联合类型。全程在浏览器本地生成。
SQL 格式化
格式化在线 SQL 格式化:关键字统一大小写、按 SELECT / FROM / WHERE 等子句换行缩进、子查询逐层展开,压缩模式去掉多余空白与注释。语句不上传服务器。
XML 格式化
格式化在线 XML 格式化与压缩:按标签层级缩进,注释、CDATA 与 DOCTYPE 各自成行,属性值里的空白原样保留。全程在浏览器本地完成,内容不上传。
HTML 格式化
格式化在线 HTML 格式化与压缩:按标签层级缩进,文本与行内标签保持同一行,script 与 pre 内容原样保留。代码不出浏览器,不上传服务器。