const fs = require("fs");//文件读写
const parse = require("@babel/parser"); //解析为ast
const traverse = require('@babel/traverse').default;//遍历节点
const t = require('@babel/types');//类型
const generator = require('@babel/generator').default;//ast解析为代码
const code = `
const a = !![]+!![]+!![];
const b = Math.floor(12.34 * 2.12)
const c = 10 >> 3 << 1
const d = String(21.3 + 14 * 1.32)
const e = parseInt("1.893" + "45.9088")
const f = parseFloat("23.2334" + "21.89112")
const g = 20 < 18 ? '未成年' : '成年'
const _0x34e16a = '3,4,0,5,1,2'['split'](',')
`
// 默认为 script,当代码中含有 import 、export 等关键字时会报错,需要指定为 module
const ast = parse.parse(code, {sourceType: "module"})
function replace_expression(path) {
// path.evaluate()直接执行js代码返回一个对象
// confident 置信度 value值
const {confident, value} = path.evaluate()
if (confident) {
path.replaceInline(t.valueToNode(value))
}
}
const visitor = {
"BinaryExpression|CallExpression|ConditionalExpression": {
enter: [replace_expression]
}
}
traverse(ast, visitor)
const result = generator(ast, {jsescOption: {"minimal": true}}).code
console.log(result)
var a = '3,4,0,5,1,2'['split'](',');
console.log(a)
备注:学习K哥AST的笔记
这篇博客介绍了如何使用Babel库的@babel/parser、@babel/traverse、@babel/types和@babel/generator来解析JavaScript代码,将其转化为AST,并进行遍历和节点替换操作。示例代码展示了对表达式的处理,如逻辑运算、算术运算、字符串转换等,并通过AST进行代码转换。
603

被折叠的 条评论
为什么被折叠?



