2012-12-10 33 views
0

如何測試數學表達式是否爲真?在JavaScript中測試方程

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

出於顯而易見的原因,該代碼^^^不工作,但我只是想知道,如果有,會做這樣的功能;評估數學表達式然後將其真實性作爲布爾值(真/假)返回。

+0

我建議'的eval()',但你也想需要將'='改爲'=='才能正常工作。 – canon

+2

你可以評估它*(但如上所述的'=')*,但實際情況如何?這感覺就像一個XY問題。否則,您可以手動解析字符串。 –

+0

@我討厭懶惰:我實際上正在研究一種方程求解器,這樣我就可以得到for和while循環的竅門。我只是想知道是否存在這樣的功能來測試我之前所說的平等。 – user1892304

回答

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代碼。這極大地限制了使用它的一系列情況。

+1

+1提到安全問題。向用戶輸入數據時,'eval()'可能會很危險。 –

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"); 
} 
1
var equation = eval("1+1==2"); 

更多細節在這裏:http://www.w3schools.com/jsref/jsref_eval.ASP

+0

-0.25爲w3schools。說真的,那裏的誤導性網站少得多。例如,[MDN](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval)。 – cHao

0

你必須評估你的表達:

eval("1+1==2") 
0

怎麼樣

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

1

你應該看看這個線程:Equation (expression) parser with precedence?

但考慮到自己在做什麼是相當複雜的,除非你可以把它分解成一些規則。

如果它始終採用X (+-/*) Y = Z的格式,那麼您可以使用正則表達式或一堆目標字符串替換去除信息。如果它需要處理A + B - C = D + Z(等式兩邊的變量數),那麼您需要查看遞歸和/或複雜的字符串解析。

0

如果你使用userinputs你可能要加引號的兩倍......否則你在分配得到一個錯誤無效的左側

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

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