Javascript eval()不工作

Javascript eval()不工作,javascript,eval,Javascript,Eval,因此,我尝试构建自己的Javascript计算器作为练习。不幸的是,当我尝试使用带有“=”按钮的eval()函数将字符串转换为结果(例如“2+2*2”)时,什么也没有发生。这是我的密码: var draw = document.getElementById("result"); function calc(x) { draw.innerHTML += x; if (x === '=') { draw.innerHTML = eval(draw.innerHTML); } else

因此,我尝试构建自己的Javascript计算器作为练习。不幸的是,当我尝试使用带有“=”按钮的
eval()
函数将字符串转换为结果(例如“2+2*2”)时,什么也没有发生。这是我的密码:

var draw = document.getElementById("result");

function calc(x) {
 draw.innerHTML += x;
 if (x === '=') {
    draw.innerHTML = eval(draw.innerHTML);
 } else if (x === 'c') {
    draw.innerHTML = '0';
 } else if (x === 'sqrt') {
    draw.innerHTML = Math.sqrt(eval(draw.innerHTML));
 } else if (x === 'pow') {
    draw.innerHTML = Math.pow(eval(draw.innerHTML));
 }
}
意味着如果您的字符串是
2*2
,并且您调用

calc("sqrt")
绘图内容将是

 "2*2sqrt"
这不是一个有效的表达式,因此
eval
将失败。如果不是操作,您可能只需要concat:

 function calc(x) {
  if (x === '=') {
    return draw.innerHTML = eval(draw.innerHTML);
  } else if (x === 'c') {
     return draw.innerHTML = '0';
  } else if (x === 'sqrt') {
     return draw.innerHTML = Math.sqrt(eval(draw.innerHTML));
  } else if (x === 'pow') {
     return draw.innerHTML = Math.pow(eval(draw.innerHTML),2);
  }
  draw.innerHTML += x;
 }
可以使用对象作为查找表进行美化的:

const result = n => eval(n),
           sqrt = n => Math.sqrt(eval(n)),
           pow = n => Math.pow(eval(n),2),
           default = (n, add) => n + add;

function calc(in){
  draw.innerHTML = ({"=":result, sqrt, pow}[in] || default)(draw.innerHTML, in);
}

也许draw不是字符串,而是“result”元素本身。你觉得怎么样?mcve->@阿兰:是的。但是为什么这个发现会有帮助呢?!注意:
Math.pow
需要两个参数。也许你想让第二个参数为2,这样它就可以与给定的数字平方。谢谢。但是在计算之后,您的解决方案仍然在结果HTML元素中保留“=”、“sqrt”、“pow”。也许我应该对这些评估使用单独的函数。
const result = n => eval(n),
           sqrt = n => Math.sqrt(eval(n)),
           pow = n => Math.pow(eval(n),2),
           default = (n, add) => n + add;

function calc(in){
  draw.innerHTML = ({"=":result, sqrt, pow}[in] || default)(draw.innerHTML, in);
}