ToolAct工具行動

JavaScript 格式化工具

輸入 JavaScript
輸出結果
行數: 1字元數: 0字節數: 0
行數: 1字元數: 0

什麼是 JavaScript 格式化?

JavaScript 格式化工具會把 JS 程式碼整理成一致、清楚、便於閱讀的結構。它會處理縮排、換行、區塊、物件字面量、陣列、函式呼叫和巢狀表達式,讓邏輯和資料流更容易追蹤。它適合除錯、程式碼審查、學習範例、複製片段,以及查看壓縮或產生後的檔案。格式化不是靜態分析,不會修復執行期錯誤、證明非同步邏輯正確、識別所有不安全依賴,也不能取代 lint。在真實專案中,輸出應與 ESLint、Prettier 或團隊既有規範保持一致,避免樣式變化掩蓋真正的程式碼改動。

使用方式

使用方式

  1. 在左側輸入框中貼上或輸入 JavaScript 程式碼
  2. 選擇縮排大小、引號樣式和分號設定
  3. 點選「格式化」美化程式碼,或點選「驗證」檢查語法
  4. 在右側檢視結果(含語法高亮)
  5. 點選「複製」將結果複製到剪貼簿

選項說明

縮排大小選擇 2 個空格、4 個空格或 Tab 縮排
引號樣式統一使用單引號或雙引號,或保留原樣
分號自動新增、移除或保留分號

快速鍵

  • Ctrl + Enter格式化
  • Ctrl + Shift + C複製結果

JavaScript 提示

  • 格式化僅確認語法正確,不代表執行時無誤。修改依賴自動分號插入或建置轉換的 JavaScript 程式碼後,請重新執行測試或在瀏覽器中驗證。
  • 驗證貼上的程式碼時,請注意瀏覽器解析器的支援範圍可能與目標執行環境或打包工具設定不同。

使用場景

讓瀏覽器端的 JavaScript 重新變得可讀當書籤小程式、分析程式碼片段、控制台輔助工具或從別處複製的行內腳本全部擠成一行時,用格式化工具還原區塊和語句的換行結構。語法檢查會透過瀏覽器 JavaScript 引擎捕捉錯誤,讓你在重複使用程式碼前先排除問題。
壓縮用於嵌入的小型腳本對於需要嵌入 HTML、CMS 設定或程式碼管理工具欄位的簡短 JavaScript,壓縮模式會移除註解和多餘空白。這是本機快速工作流程,適合部署用的程式碼片段,不必引入完整的打包工具。
分享範例前先檢查正確性在把重現步驟發給同事或貼出精簡解答前,先貼上程式碼確認能正常解析並統一排版。本工具最適合瀏覽器相容的 JavaScript 片段,不支援 TypeScript、JSX 或專案層級的轉換。
為審查而重新格式化第三方壓縮腳本將已發布的 min.js 套件展開,檢查混淆邏輯、無用分支或意外的網路請求,然後再加入程式碼管理工具。若有 source map 請一併對照閱讀,因為壓縮檔中的變數重新命名無法單靠格式化還原。注意 return 語句、模板字串和鏈式 .then() 周圍的輸出:根據 ECMA-262 第 11.9.1 節的自動分號插入(ASI)規則,格式化工具不能在以 (、[、`、+、- 或 / 開頭的語句前直接斷行,否則會悄悄改變程式語意。
與 Prettier 預設值進行對比將程式碼片段分別通過本格式化工具和專案的 Prettier 設定,觀察箭頭函式、三元運算和鏈式呼叫周圍的空白差異。可作為快速檢查,但不能取代 Prettier,因為後者支援 JSX、TypeScript 和 import 排序等本工具不具備的功能。Prettier 的 printWidth 設為 80、100 或 120 會影響長鏈式呼叫的換行位置,單引號與雙引號的切換會重新渲染字串字面量而不影響附帶的註解;但 JSX 屬性必須使用雙引號,因為瀏覽器會將其視為 HTML 解析,本獨立格式化工具無法處理。

技術原理

JavaScript 格式化工具是一個三階段管線,基於 ECMA-262 語法定義:詞法掃描器產生 IdentifierName、NumericLiteral、StringLiteral、TemplateHead/Middle/Tail、Punctuator、Keyword 和 LineTerminator 的詞法單元流;解析器建構與 ESTree 相容的 AST(即 @babel/parser、acorn 和 esprima 所使用的形狀);列印器遍歷樹狀結構,根據縮排大小和目標列印寬度的規則產生文字。Prettier 將 AST 編譯為由 group、indent、line 和 softline 原語組成的 Doc 中間表示,然後排版演算法選擇斷點使輸出適應 printWidth(80、100、120)。ESLint --fix 則針對原始碼就地改寫詞法單元,更積極地保留註解,但僅修正標記為自動修正的規則。 列印器不能隨意插入換行:ECMA-262 第 11.9.1 節的自動分號插入(ASI)會在任何 LineTerminator 處結束陳述式,除非下一個詞法單元是延續。具體來說,在以 (、[、`、+、-、/ 開頭的行前斷行,或在 ++/-- 詞法單元前斷行,會悄悄改變語意;在 return、throw、break、continue 或 yield 之後直接換行會插入分號並丟棄運算元。模板字串(反引號)逐位元組保留其內部內容,包括嵌入的 ${} 表達式(其內部作為 JS 重新格式化,但周圍的空白不會處理)。註解透過 leading/trailing/innerComments 陣列重新附加到鄰近的 AST 節點,使其在往返轉換中得以保留。 詞法掃描和列印都是 O(n) 複雜度(n 為原始碼長度),常數很小;得益於 ECMA-262 LR(1) 風格語法的單一詞法單元前瞻,解析器對格式良好的程式碼實際上是線性的。標準 JavaScript 解析不涵蓋 JSX、TypeScript 型別標註、裝飾器或 Flow,這些需要 @babel/parser 外掛或 @typescript-eslint/parser;對 .tsx 檔案執行純 JS 工具會拒絕 `: type` 標註。Source Map(v3 版)可在建置步驟需要保留堆疊追蹤準確性時保留原始行列對應,行尾(LF 與 CRLF)在寫入時正規化,而非在解析時。

  • 管線:詞法掃描器(依 ECMA-262 第 12 節產生詞法單元流)-> ESTree AST(acorn/@babel/parser/esprima)-> 列印器;詞法掃描器和列印器為 O(n),解析器為 O(n) 且帶單一詞法單元前瞻。
  • ECMA-262 第 11.9.1 節的 ASI 陷阱:絕不在以 (、[、`、+、-、/ 開頭的詞法單元前斷行,也不在 ++/-- 前斷行,更不要在 return/throw/break/continue/yield 之後立即斷行。
  • Prettier 與 ESLint --fix 的差異:Prettier 將 AST 降階為 Doc 中間表示(group/indent/line),選擇適應 printWidth(80/100/120)的排版;ESLint --fix 就地改寫詞法單元,僅套用標記為修正器的規則。
  • 註解保留:leading/trailing/innerComments 綁定到 AST 節點;緊接在宣告上方的 JSDoc 區塊會保持附著,列印器不會將其孤立到前一個陳述式上。
  • 模板字串(反引號)逐位元組保留;僅 ${} 內部的 JS 會重新列印。正則表達式字面值和字串字面值的引號會正規化為選定的單引號/雙引號風格,並重新計算 \ 跳脫。
  • 方言覆蓋:純 JS 解析器拒絕 JSX、TypeScript 型別、裝飾器和 Flow;.tsx/.ts 檔案需要 @babel/parser 外掛 ['jsx','typescript','decorators-legacy'] 或 @typescript-eslint/parser。
  • 輸出行正規化:根據設定寫入 LF 或 CRLF 行尾(與輸入無關),多行陣列/物件/呼叫套用尾隨逗號策略,當工具鏈需要保留原始行列資訊時會輸出 Source Map v3。

範例

格式化前

function greet(name){if(!name){return 'Hello, stranger';}const greeting=`Hello, ${name}!`;console.log(greeting);return greeting;}

格式化後(2 個空白縮排)

function greet(name) {
  if (!name) {
    return 'Hello, stranger';
  }
  const greeting = `Hello, ${name}!`;
  console.log(greeting);
  return greeting;
}

壓縮後

function greet(n){if(!n)return"Hello, stranger";const e=`Hello, ${n}!`;return console.log(e),e}

常見問題

格式化工具採用哪種風格?

大多數版本使用 Prettier 預設設定:每行 80 字元寬、加分號、雙引號、2 空格縮排,並在 ES5 允許的位置加上尾隨逗號。如果您的專案採用不同風格,可以調整選項。在相同設定下,輸出是確定性的——同樣的輸入會得到同樣的輸出。

工具會執行我的 JS 嗎?

不會。它只解析並重新印出原始程式碼。副作用、網路請求和執行時錯誤都不相關——格式化工具不會執行腳本。

它會修正語法錯誤嗎?

不會。解析器拒絕格式化無效的 JavaScript,並會指出解析失敗的位置。請先修正語法錯誤;常見原因包括括號缺失、IIFE 之後的 return 缺少分號,或範本字串的反引號不對稱。

支援 JSX 與 TypeScript 嗎?

大多數現代版本可以解析含 JSX 的 JavaScript 與 TypeScript 語法(.ts、.tsx)。格式化工具會根據解析結果自動辨識語法。如果您是在純 ES5 環境中作業,請關閉 TypeScript 模式以避免誤報錯誤。

可以壓縮 JS 嗎?

部分版本提供 minify(Terser 風格)模式,會重新命名變數、移除空白並消除無用程式碼。輸出體積很小但難以閱讀。生產環境建構時使用壓縮,原始碼審閱時則使用格式化。

我的程式碼會被上傳嗎?

不會。解析與輸出都在您的瀏覽器中透過 JavaScript 解析器完成。貼上的程式碼不會被傳輸出去。

為什麼我的註解位置略有移動?

Prettier 與類似的格式化工具會把註解附加到最近的 AST 節點上。位於兩個函式之間的註解,在 AST 中可能「歸屬」於下方的函式,因此重新輸出時會被掛到那裡。同行的尾端註解通常會原樣保留,獨立註解則可能位置偏移。