当前位置: 首页 > 后端技术 > Node.js

eval5JavaScript解释器,1.4.0-1.4.5发布日志

时间:2023-04-04 00:24:28 Node.js

eval5是一款基于TypeScript编写的JavaScript解释器,100%支持ES5语法。支持浏览器、node.js、小程序等JavaScript运行环境。项目地址:https://github.com/bplok20010/eval5浏览器环境需要沙箱环境才能执行JavaScript代码。浏览器环境控制代码的执行时间。不支持eval/Function的JavaScript运行环境,如:微信小程序更新日志1.4.5修复with语句调用函数时丢失此信息1.4.4修复下次调用evaluate时变量声明错误在不使用try-catch的情况下发生异常时。1.4.3修复WithStatement中赋值不生效的问题。rootContext的创建调整为:Object.create(options.rootContext),抗污染。1.4.2新增内置对象:URIErrorRangeErrorSyntaxErrorReferenceError修复赋值表达式触发对象getter方法调用1.4.1修复重新执行超时机制失效问题修复函数表达式赋值导致返回值混淆问题1.4.0InterpreterInternaleval/Functionrewrites新参数options.rootContext新参数options.globalContextInFunction去除Interpreter.rootContext运行原理eval5首先编译源代码得到一个树状的抽象语法树(AST)。抽象语法树由不同的节点组成,每个节点的类型标识不同的语句或表达式,例如:1+1抽象语法树{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","operator":"+","left":{"type":"Literal","value":1,"raw":"1"},"right":{"type":"Literal","value":1,"raw":"1"}}}],"sourceType":"script"}根据节点写不同的处理键入模块并获得最终结果。例如:根据1+1的语法树,我们可以写出解释器代码:functionhandleBinaryExpression(node){switch(node.operator){case'+':returnnode.left.value+node.right.value;case'-':returnnode.left.value-node.right.value;}}例子在线体验更多例子下面是解析echarts4效果的例子: