评估()不工作
eval() is not working
所以我尝试构建自己的 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));
}
}
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;
}
可以用一个对象作为查找来美化table:
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);
}
所以我尝试构建自己的 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));
}
}
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;
}
可以用一个对象作为查找来美化table:
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);
}