在Eval()中完美的JavaScript语法创build错误
我在Node.js中创build了一个非常原始的在线解释器/编译器,只是为了体验多种语言,而且在运行JS代码时遇到了一个非常奇怪的问题。
当用户发布信息时,我会采取他们的input,稍微转义一下,然后将其直接input到命令行中(可怕的做法,我知道,但是稍后我将转向一个不涉及直接CMD的新系统)转义双引号和\ n,\ r等
当获得input,我child_process.exec
命令(是的,我给它一个callback,但这是一个相当长的,我不认为是必要的写)
let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`); // First parameter represents the builder to run the user input with // and escaped code is self-explanatory
处理JS的构build器只有一行:
eval(process.argv[2]); // Already somewhat-escaped code
现在,当我写这样的东西
function foo(x) { console.log(x); } foo(5);
我在5
的控制台中得到正确的输出。
但是当我做类似的事情
let foo = function(x) { console.log(x); } foo(5);
我得到一个错误说
console.log(x); ^ SyntaxError: Unexpected identifier
同样的事情也发生在我使用箭头语法的时候。 我不知道会发生什么事情。 任何想法或帮助?
我认为问题在于你错过了一个;
在第二种情况下}
后。 通常这不会是一个问题,因为JavaScript解释\n
作为声明的结束,但你说你正在删除\n
,所以这就是为什么它失败。
这是第二个例子中丢失的分号。 它应该是:
let foo = function(x) { console.log(x); }; foo(5);
你的build设者似乎正在删除换行符,否则将允许JavaScript来处理分号的缺席。 (有关js何时可以自动插入分号的更多解释,请参阅这里 。)
- 在node.js中,如何以最轻量级的方式检查给定的代码串是否在语法上是正确的?
- node.js – 评估一个现场stream程
- 如何评估eval()内的console.log(1 + 2)?
- Node.JS vm.runInNewContext()vs require()和eval()
- 安全地parsing和评估用户input
- // @sourceurl在脚本标签在Firefox中
- 用于运行不可信用户的Node.js Sandbox提交代码
- expression式eval(“function(x){return x * x}”)打破了node.js控制台
- Javascript eval()exception – 行号