在 console.log 语句上使用 eval()

Using eval() on console.log statements

我目前正在开发一个站点,该站点通过 javascript 中的 ACE 编辑器接受用户输入并对其进行评估并在另一个代码编辑器中显示输出。

我遇到的问题是,我无法使用 eval 正常工作。例如,如果我得到以下用户输入:

    var i = 0;

我可以对提交的字符串调用 eval 并且 return 值未定义。为什么我得不到 0,因为最后计算的语句应该是 i = 0?另一个例子:如果我改为获取用户输入:

    var i = 0;
    console.log(i);

我仍然有一个未定义的 return 值,尽管我在浏览器控制台中获得了正确的控制台日志。如果用户改为输入:

    i = 0;

一切正常,return 值为零并且 eval 有效。是否有可能使用 eval 来评估提交的完整代码,就像有人将这些行一行一行地输入控制台并获得输出一样?

感谢您的帮助,

里科吉尔

eval('var i = 0') 不打印 i 的值! 它评估表达或陈述。在这种情况下,语句 var i = 0,因为 var i = 0 不能是 truefalse 或任何其他值,它是 undefined

如果您想知道 eval 的作用,请打开浏览器的控制台,您输入的所有内容都会求值,结果显示在下面的行中

Is there a possibility to use eval so that it evaluates the complete code submitted like if someone would type these lines one by one into the console and get the outputs?

基本上是这样。

var i = 0;

I can call eval on the submitted String and the return value is undefined. Why don't I get 0, as the last evaluated statement should be i = 0?

如果您在 Chrome 控制台中准确键入(例如),您将看到 undefined,因为 var 语句 has an empty result value。尽管在实践中,var i; i = 0;var i = 0; 具有相同的效果,但在语义上它们是不同的,后者的结果值为空,而前者(赋值语句)的结果值等于分配的值。

var i = 0;
console.log(i);

I still have an undefined return value, although I get the proper console log in my Browser console.

那是因为您看到 console.log 的 return 值,即 undefined