用户输入带有变量声明的JavaScript eval

时间:2014-03-05 03:26:40

标签: javascript command-line firebug eval

作为家庭作业的一部分,我试图在浏览器环境中实现类似于Firebug中可用的JavaScript控制台。根据我的观点,eval()似乎是最简单的方法。但是,即使是非常基本的用户输入,我的代码也遇到了一些问题。例如:

var number = 5;

导致语法错误,而不是仅像在Firebug中那样评估undefined。因此,我似乎无法在eval字符串中声明变量。如果我做一些更简单的事情:

3 + 4 * Math.PI

它正常工作。我试图找到一个在包含变量声明的字符串上使用eval()的人的例子,我似乎无法找到任何人这样做。

在将其编译为eval()的新字符串之前,是否需要使用正则表达式完全解析用户输入?

eval()能否将分号理解为换行符?我也找不到使用这些的人。

function runMiniFirebug() {
    var userInput = document.getElementById("user-input").value;
    try {
        var userOutput = eval('(' + userInput + ')');
        document.getElementById("js-output").innerHTML += '<p class="input">>>>' + userInput + '<p>';
        document.getElementById("js-output").innerHTML += '<p class="ouput">' + userOutput + '<p>';
    }
    catch(error) {
        document.getElementById("js-output").innerHTML += '<p class="input">>>>' + userInput + '<p>';
        document.getElementById("js-output").innerHTML += '<p class="error">' + error.message + '<p>';
    }
}

编辑: 所以似乎增加的parens导致错误。这是我的教师幻灯片的一部分。信息不正确,还是我只是错误地解释它?

  

以{...}

分隔的字符串      

- 你必须添加额外的parens,以便JavaScript知道   大括号用于对象文字,而不是用于分隔语句。

     

•这样做永远不会伤害,所以经常添加parens

     

- var test2 =“{firstName:'Jay',lastName:'Sahn'}”;

     

- var person = eval(“(”+ test2 +“)”);

1 个答案:

答案 0 :(得分:4)

var userOutput = eval('(' + userInput + ')');

为什么用括号括起来?这会创建语句

(var number = 5;)

这是无效的语法。

只需删除'(' ++ ')'


至于您的编辑,指的是仅评估单个表达式var number = 5;不是表达式,也不是alert(1 + 1); alert(2 + 2);。在括号中包装将导致错误。