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

时间:2017-03-03 09:48:12

标签: javascript eval ace-editor

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

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

"SELECT VAL2 FROM PARM WHERE ID BETWEEN 9900029 AND 9900033
UNION ALL
SELECT VAL4 FROM PARM WHERE ID = 9900030"

我可以在提交的String上调用eval,返回值是未定义的。为什么我得不到0,因为最后一个评估语句应该是i = 0?另一个例子:如果我改为获得用户输入:

    var i = 0;

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

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

一切都很好,返回值为零,eval工作。是否有可能使用eval来评估提交的完整代码,就好像有人将这些行逐个输入控制台并获得输出一样?

感谢您的帮助,

rikojir

2 个答案:

答案 0 :(得分:2)

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

如果您想知道eval的作用然后打开浏览器的控制台,您编写的所有内容都会被评估,结果会显示在下面一行

答案 1 :(得分:1)

  

是否有可能使用eval以便评估提交的完整代码,就好像有人会将这些行逐个输入控制台并获得输出?

很大程度上,确实如此。

var i = 0;
     

我可以在提交的String上调用eval,返回值是未定义的。为什么我没有得到0,因为最后一个评估语句应该是i = 0?

如果您在Chrome控制台中输入完全相同的内容(例如),则会看到undefined,因为var声明has an empty result value。尽管实际上var i; i = 0;具有与var i = 0;相同的效果,但在语义上它们是不同的,后者具有空结果值,而前者(赋值语句)具有等于的结果值分配的值。

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

我仍然有一个未定义的返回值,尽管我在浏览器控制台中获得了正确的控制台日志。

那是因为您看到了console.log的返回值,即undefined