eval()不起作用

时间:2017-12-02 20:29:55

标签: 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 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));
 }
}

1 个答案:

答案 0 :(得分:1)

draw.innerHTML += x;

表示例如你的字符串是2*2,你可以打电话给

calc("sqrt")

抽奖内容将是

 "2*2sqrt"

并且那不是有效的表达式,因此eval将失败。如果不是操作,您可能只想连接:

 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);
}