【问题标题】:User input JavaScript eval with variable declarations带有变量声明的用户输入 JavaScript eval
【发布时间】:2014-03-05 03:26:39
【问题描述】:

作为作业的一部分,我正在尝试在浏览器环境中实现一个类似于 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>';
    }
}

编辑: 所以似乎添加的括号导致了错误。这是我的讲师幻灯片中的一部​​分。信息不正确,还是我只是解释错误?

用 { ... } 分隔的字符串

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

• 这样做永远不会有坏处,因此请定期添加括号

– var test2 = "{ firstName: 'Jay', lastName: 'Sahn' }";

– var person = eval("(" + test2 + ")");

【问题讨论】:

    标签: javascript command-line firebug eval


    【解决方案1】:
    var userOutput = eval('(' + userInput + ')');
    

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

    (var number = 5;)
    

    这是无效的语法。

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


    至于您的编辑,那是指仅评估单个表达式var number = 5; 不是表达式,alert(1 + 1); alert(2 + 2); 也不是。用括号括起来会导致错误。

    【讨论】:

    • 将在我的问题中添加原因,因为它已格式化。删除它们似乎可以解决我的问题...
    • @sage88 是的,这应该是用户输入的内容,而不是你做的。如果有人真的想要一个块,比如{alert(1+1); alert(2+2);},该怎么办?
    • 在我原来的问题中添加了为什么我有它们的原因,我是否错误地解释了他的陈述?
    • 感谢您的反馈。考虑在括号中包装多行 javascript 就很明显为什么我的原始代码永远无法工作。
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多