JavaScript AST是源代码的语法结构化树形表示,忽略空格注释,仅反映语法逻辑,用于静态分析、自动修复、重构和编译转换;以const sum = a + b;为例,其AST含VariableDeclaration、VariableDeclarator、Identifier和BinaryExpression等嵌套节点。
JavaScript AST(抽象语法树)是源代码的结构化表示,把代码转换成树形对象,每个节点代表一种语法结构,比如变量声明、函数调用或二元运算。它不关心空格、注释或缩进,只反映程序的语法逻辑。有了 AST,你就能用程序“读懂”代码,进而做静态分析、自动修复、重构甚至编译转换。
比如这段代码:
const sum = a + b;它的 AST 会包含多个嵌套节点:一个 VariableDeclaration(声明语句),里面有一个 VariableDeclarator,再往下是 Identifier(sum)、BinaryExpression(a + b),而后者又包含两个 Identifier(a 和 b)节点。所有这些节点都有 type、start/end 位置、以及指向子节点的 body 或 left/right 等属性。
最常用的是 Acorn(轻量、快)或 ESTree 兼容的解析器如 @babel/parser。你也可以直接用在线工具:
);核心是遍历 AST 节点,识别模式并提取信息:
console.log 出现次数window.eval)转换 = 遍历 + 修改节点 + 生成代码。主流方案是 Babel 插件:
path.replaceWith())、插入新节点、删除节点,或修改属性真实项目中,ESLint 规则、Prettier 格式化、TypeScript 编译、React 的 JSX 转换,底层都重度依赖 AST 操作。