作为家庭作业的一部分,我试图在浏览器环境中实现类似于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 +“)”);
答案 0 :(得分:4)
var userOutput = eval('(' + userInput + ')');
为什么用括号括起来?这会创建语句
(var number = 5;)
这是无效的语法。
只需删除'(' +
和+ ')'
。
至于您的编辑,指的是仅评估单个表达式。 var number = 5;
不是表达式,也不是alert(1 + 1); alert(2 + 2);
。在括号中包装将导致错误。