逗号表达式是js混淆中常用伎俩,相信大家都见识过,明明几个不相干的代码,偏偏凑到一个语句里,干扰阅读和调试。而那些混淆严重的代码,逗号表达式经常出现在赋值语句、for语句、return语句和条件语句里,阅读起来非常困难。如果能将个逗号表达式的代码还原出来,而且代码逻辑不变,将大大的提高可读性,增强调试。
一.插件名称
逗号表达式还原。
二.还原实例
还原前:
for(var i=0; i<10 ;i++)
{
a = a+1,b = b+2,c = c+3;
}
还原后:
for (var i = 0; i < 10; i++) {
a = a + 1;
b = b + 2;
c = c + 3;
}
三.是否通用
是。
四.前置插件
前置插件: 为避免出错,在调用本插件之前,需要调用其他的插件,可以理解为
调用本插件前的准备,减少bug。
https://t.zsxq.com/Em2baII
https://t.zsxq.com/uVjujYF
切记,任何情况下调用 还原逗号表达式的插件时,都需要优先调用上面的两个插件,否则可能还原出错。
五.还原思路
还原逗号表达式,肯定是遍历 SequenceExpression 节点,为避免出错,采用exit方式遍历。
过滤掉一些无法进行还原的节点,比如逻辑表达式 的 Right 节点,条件表达式的父节点也是条件表达式等一些还原后导致出错的节点
保留最后一个expression,用以替换整个SequenceExpression 节点,见代码中的pop操作。
其他的expression节点构成 ExpressionStatement 节点后依次插入。
最后重构scope。
六.插件源码
https://t.zsxq.com/6qzjauf
AD:
欢迎加入我的个人星球,编写了很多有用的插件,只需要稍微有一点js基础即可,对爬虫工程师和前端工程师均有一定的帮助。