繁体   English   中英

用户输入的JavaScript eval与变量声明

[英]User input JavaScript eval with variable declarations

作为家庭作业的一部分,我试图实现一个JavaScript控制台,该控制台类似于浏览器环境中Firebug中可用的控制台。 根据我的选择, 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 +“)”);

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

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

(var number = 5;)

这是无效的语法。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM