如何测试数学表达式是否为真?
var equation = "1 + 1 = 2";
if (equation === true){
document.write("1 + 1 = 2");
}else{
document.write("1 + 1 =/= 2");
}
由于显而易见的原因,这段代码 ^^^ 不起作用,但我只是想知道是否有一个函数可以做到这一点;评估数学表达式,然后将其真实性返回为布尔值(真/假)。
如何测试数学表达式是否为真?
var equation = "1 + 1 = 2";
if (equation === true){
document.write("1 + 1 = 2");
}else{
document.write("1 + 1 =/= 2");
}
由于显而易见的原因,这段代码 ^^^ 不起作用,但我只是想知道是否有一个函数可以做到这一点;评估数学表达式,然后将其真实性返回为布尔值(真/假)。
一种方法是使用eval
; 但请注意,它需要 JavaScript 表示法,而不是 ad-hoc 表示法:
var equation = "1 + 1 == 2"; // note: `==`, not `=`
if (eval(equation)){
document.write("1 + 1 = 2");
}else{
document.write("1 + 1 =/= 2");
}
这种方法的缺点是不是很“安全”,因为eval
'd 字符串可以包含任何 JavaScript 代码。这极大地限制了使用它的情况。
我会编写一个方法来简单地检查两个值是否按预期相加:
function addsUp(a, b, x) {
return a + b === x;
}
if (addsUp(1, 1, 2)){
document.write("1 + 1 = 2");
}else{
document.write("1 + 1 =/= 2");
}
var equation = eval("1+1==2");
你应该看看这个线程:Equation (expression) parser with priority?
但是请考虑到您正在做的事情非常复杂,除非您可以将其分解为一些规则。
如果它始终采用以下格式,X (+-/*) Y = Z
则您可以使用正则表达式或一堆目标字符串替换来删除信息。如果它需要处理A + B - C = D + Z
(等式两边的变量数量可变),那么您将需要研究递归和/或复杂的字符串解析。
你必须评估你的表达:
eval("1+1==2")
怎么样
var equation = "1 + 1 = 2";
equation = equation.replace('=','==');
if (eval(equation)){
document.write("1 + 1 = 2");
}else{
document.write("1 + 1 =/= 2");
}
?
如果您使用用户输入,您可能必须将引号加倍...否则您会收到错误 Invalid left-hand side in assignment
var equation = "1 + 1 == 2";
if (eval(equation)){
document.write("1 + 1 = 2");
}else{
alert('s');
document.write("1 + 1 =/= 2");
}