[英]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.