用JavaScript测试一个等式

用JavaScript测试一个等式,javascript,Javascript,如何测试数学表达式是否正确 var equation = "1 + 1 = 2"; if (equation === true){ document.write("1 + 1 = 2"); }else{ document.write("1 + 1 =/= 2"); } 出于显而易见的原因,这段代码^^^^不起作用,但我只是想知道是否有一个函数可以做到这一点;对一个数学表达式求值,然后以布尔形式返回其真实性(真/假)。我将编写一个方法,简单地检查两个值是否按预期相加: function

如何测试数学表达式是否正确

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

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

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

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

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

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");
}
详情如下:


此处有更多详细信息:

一种方法是使用
eval
;但请注意,它需要JavaScript符号,而不是特殊符号:

var equation = "1 + 1 == 2";         // note: `==`, not `=`
if (eval(equation)){
  document.write("1 + 1 = 2");
}else{
  document.write("1 + 1 =/= 2");
}

这种方法的缺点是不太“安全”,因为
eval
'd字符串可以包含任何JavaScript代码。这极大地限制了使用它的意义所在的一系列情况。

一种方法是使用
eval
;但请注意,它需要JavaScript符号,而不是特殊符号:

var equation = "1 + 1 == 2";         // note: `==`, not `=`
if (eval(equation)){
  document.write("1 + 1 = 2");
}else{
  document.write("1 + 1 =/= 2");
}

这种方法的缺点是不太“安全”,因为
eval
'd字符串可以包含任何JavaScript代码。这大大限制了使用它的意义所在的一系列情况。

您必须计算表达式:

eval("1+1==2")

您必须计算表达式:

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");
}
怎么样

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

您应该看看这个线程:

但是,如果你能把它分解成一些规则,那么你所做的事情就相当复杂了。
如果其格式始终为
X(+-/*)Y=Z
,则可以使用正则表达式或一组目标字符串替换来去除信息。如果它需要处理
A+B-C=D+Z
(等式两边的变量数量可变),那么您需要研究递归和/或复杂的字符串解析

您应该看看这个线程:

但是,如果你能把它分解成一些规则,那么你所做的事情就相当复杂了。
如果其格式始终为
X(+-/*)Y=Z
,则可以使用正则表达式或一组目标字符串替换来去除信息。如果它需要处理
A+B-C=D+Z
(等式两边的变量数量可变),那么您需要研究递归和/或复杂的字符串解析

如果使用userinputs,则可能需要将引号加倍。。。否则,将在赋值的左侧出现错误

var equation = "1 + 1 == 2";

if (eval(equation)){
  document.write("1 + 1 = 2");
}else{
    alert('s');
  document.write("1 + 1 =/= 2");
}​

如果使用userinputs,则可能需要将引号加倍。。。否则,将在赋值的左侧出现错误

var equation = "1 + 1 == 2";

if (eval(equation)){
  document.write("1 + 1 = 2");
}else{
    alert('s');
  document.write("1 + 1 =/= 2");
}​

我建议您使用
eval()
,但您还需要将
=
更改为
=
,这样才能正常工作。您可以对其进行评估(但对于上面提到的
=
),但实际情况如何?这感觉像是一个XY问题。否则,您可以手动解析字符串。@I Hate Lazy:事实上,我正在研究一种方程解算器,以便掌握for和while循环的窍门。我只是想知道,是否存在这样一个函数来测试我前面提到的等式。@user1892304,为什么不将值记录到控制台,或者使用断言呢
console.assert(1+1==2,“哦,数学怎么了?”)
看看这里的第二个答案:。我建议
eval()
,但是你还需要将
=
更改为
=
,这样才能正常工作。你可以对它进行评估(但是上面提到的
=
),但实际情况如何?这感觉像是一个XY问题。否则,您可以手动解析字符串。@I Hate Lazy:事实上,我正在研究一种方程解算器,以便掌握for和while循环的窍门。我只是想知道,是否存在这样一个函数来测试我前面提到的等式。@user1892304,为什么不将值记录到控制台,或者使用断言呢
console.assert(1+1==2,“哦,不,数学怎么了?”)
看看这里的第二个答案:.+1用于提及安全问题<代码>eval()在向其中输入用户输入时可能会很危险。+1用于提及安全问题<代码>eval()在向其中输入用户输入时可能会很危险。-0.25适用于W3学校。说真的,那里的误导性网站要少得多,例如,W3学校为-0.25。说真的,那里的误导性网站要少得多,例如