当前位置: 首页 > news >正文

关于 ast: Babel AST 全类型总览

AST 的每个节点都有一个 type 字段,用来标识它的语法类型。

程序结构节点

type说明示例
Program整个程序的根节点整体代码结构
BlockStatement大括号代码块 {}if、function、for 等的主体
ExpressionStatement表达式语句(如 a + b;
EmptyStatement分号 ; 空语句

变量与赋值

type说明示例
VariableDeclaration变量声明(var/let/const)var a = 1;
VariableDeclarator声明项a = 1
AssignmentExpression赋值表达式a = b + 1
Identifier标识符(变量名)a
Literal字面量(数/字符串等)"abc", 123, true

函数定义与调用

type说明示例
FunctionDeclaration声明式函数function fn() {}
FunctionExpression表达式形式的函数var f = function() {}
ArrowFunctionExpression箭头函数()=>{}
CallExpression函数调用fn(arg1, arg2)
ReturnStatement返回语句return 123

运算表达式

type说明示例
BinaryExpression二元运算符a + b, x * y
LogicalExpression逻辑运算符(&&、
UnaryExpression一元运算(+a、-b、!x)!isLogin
UpdateExpression自增自减 ++ --i++, --x
AssignmentExpression赋值表达式a = b + 1
ConditionalExpression三元表达式 a ? b : c

对象与数组相关

type说明示例
ObjectExpression对象字面量{a:1, b:2}
Property对象的属性a:1
ArrayExpression数组字面量[1, 2, 3]
MemberExpression属性访问 obj.prop 或 obj["a"]obj.a, arr[0]

流程控制语句

type说明示例
IfStatementif 语句if (x) {}
SwitchStatementswitch 语句switch(x){}
SwitchCaseswitch 的 case 分支case 1:
WhileStatementwhile 循环while (true) {}
DoWhileStatementdo...while 循环do {} while (true)
ForStatementfor 循环for (let i=0;i<10;i++)
BreakStatementbreakbreak;
ContinueStatementcontinuecontinue;

全局对象 / 关键字

type说明示例
ThisExpressionthisthis.a
NewExpressionnew 表达式new Date()
SequenceExpression多个表达式用逗号隔开a = 1, b = 2
ThrowStatementthrow 抛出错误throw new Error("msg")
TryStatementtry-catch-finally 结构try { ... } catch (e) {}

特殊用途(混淆常用)

type说明示例
Eval(间接通过 CallExpression)用 eval 执行的内容会被解析为表达式树eval("var a = 1")
Function + Function()动态生成函数new Function("a", "b", "return a + b")
TemplateLiteral模板字符串(含 ${}`hello ${name}`
TaggedTemplateExpression标签模板(如 crypto 模板 tag 加密)taghello`

如何查看 type?

可以直接用 Babel 插件、AST Explorer 来查看节点类型:

工具推荐:

  •  AST Explorer

  •  Babel 插件 + traverse(ast, visitor) 打印 path.node.type

traverse(ast, {enter(path) {console.log(path.node.type);  // 输出每个节点的类型}
});

相关文章:

  • #跟着若城学鸿蒙#HarmonyOS NEXT学习之Blank组件详解
  • C语言—再学习(数据的存储类别)
  • 大模型——Crawl4AI为 LLM 和 RAG 准备高质量网页数据
  • electron 基础知识
  • 服务器租用与托管注意事项有哪些
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4
  • Python Day 24 学习
  • 亚马逊云科技:开启数字化转型的无限可能
  • LeetCode 3335.字符串转换后的长度 I:I先递推
  • 标贝科技:大模型领域数据标注的重要性与标注类型分享
  • Linux——守护进程
  • 改变应用的安装目录
  • 浅谈 Redis 数据类型
  • pdf url 转 图片
  • CSV注入攻击技术解析
  • Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
  • 【认知思维】过度自信效应:高估自我能力的认知偏差
  • 【Pandas】pandas DataFrame cumprod
  • PostgreSQL 服务器信号函数
  • ZYNQ实战:可编程差分晶振Si570的配置与应用指南
  • 中国海警舰艇编队5月14日在我钓鱼岛领海巡航
  • 牛市早报|中美日内瓦经贸会谈联合声明公布
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 中国一直忽视欧盟经贸问题关切?外交部:事实证明中欧相互成就,共同发展
  • 三大猪企4月生猪销量同比均增长,销售均价同比小幅下降
  • 开局良好,我国第一季度广告业务收入保持较快增速