0

如何测试数学表达式是否为真?

var equation = "1 + 1 = 2";
if (equation === true){
  document.write("1 + 1 = 2");
}else{
  document.write("1 + 1 =/= 2");
}

由于显而易见的原因,这段代码 ^^^ 不起作用,但我只是想知道是否有一个函数可以做到这一点;评估数学表达式,然后将其真实性返回为布尔值(真/假)。

4

7 回答 7

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 代码。这极大地限制了使用它的情况。

于 2012-12-10T19:48:30.507 回答
1

我会编写一个方法来简单地检查两个值是否按预期相加:

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");
}
于 2012-12-10T19:47:36.963 回答
1
var equation = eval("1+1==2");  

更多细节在这里:http ://www.w3schools.com/jsref/jsref_eval.ASP

于 2012-12-10T19:48:27.150 回答
1

你应该看看这个线程:Equation (expression) parser with priority?

但是请考虑到您正在做的事情非常复杂,除非您可以将其分解为一些规则。

如果它始终采用以下格式,X (+-/*) Y = Z则您可以使用正则表达式或一堆目标字符串替换来删除信息。如果它需要处理A + B - C = D + Z(等式两边的变量数量可变),那么您将需要研究递归和/或复杂的字符串解析。

于 2012-12-10T19:49:18.133 回答
0

你必须评估你的表达:

eval("1+1==2")
于 2012-12-10T19:48:53.000 回答
0

怎么样

var equation = "1 + 1 = 2";
equation = equation.replace('=','==');
if (eval(equation)){
  document.write("1 + 1 = 2");
}else{
  document.write("1 + 1 =/= 2");
}

?

于 2012-12-10T19:49:10.530 回答
0

如果您使用用户输入,您可能必须将引号加倍...否则您会收到错误 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");
}​
于 2012-12-10T19:50:08.017 回答