【AST 还原】一、还原数值常量 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:20")}}更新实例
// 还原前
var flag = (326190 ^ 326191) > (60716 ^ 60709)
// 还原后
var flag = 1 > 9;
还原
遍历
二项式节点
,左右
都是数字类型
,则满足还原要求
是否通用:是
[]()
traverse(ast, {
BinaryExpression(path) {
// 判断这样的 326190 ^ 326191 特征
if (type.isNumericLiteral(path.node.left) && type.isNumericLiteral(path.node.right)) {
let {confident, value} = path.evaluate() // 使用提供的 api 计算
confident && path.replaceWith(type.valueToNode(value))
}
}
})
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}