在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何时可以自动插入分号的更多解释,请参阅这里 。)