2016-10-17 38 views
3

我正在做這個計算器項目,我想檢查操作是否有效,不知何故我不能檢查eval的布爾值如果它是false?在控制檯上:如何檢查eval()上的布爾值還是算術運算錯誤?

Boolean(eval('2+2(9.1-)9')); 
Boolean(2+2(9.1-)9); // Both operations return unexpected token 

不像Boolean(2+2) < - 返回true。幫幫我?

+3

你爲什麼在這種情況下使用eval? - 還有'2 + 2(9.1-)9'無效 – evolutionxbox

+0

你想做什麼? '2 + 2(9.1-)9'沒有數學意義。 –

+0

「2 + 2(9.1-)9」是什麼意思? – domyos

回答

0

如果我正確理解你的問題,你唯一想知道的是「這是一個有效的表達式」。一個非常簡單的方法來檢查這是使用eval()像你這樣做,並把它包含在try,並看看是否有任何錯誤發生。例如,你可以這樣寫:

try { 
    eval('2+2(9.1-)9'); 
    valid = true; 
} catch (e) { 
    valid = false; 
} 

之後,可變valid包含true如果表達式是有效的,並且false如果事實並非如此。

但是eval()的警告雖然:每個有效的代碼都會通過這個測試,不僅僅是數學表達式:Plus,代碼將被執行。小心你給了它什麼字符串。

1

你其實並不需要評估,以便代碼,看看它是否有效 - 只是try創建Function

function checkIt() { 
 
    var fn 
 

 
    try { 
 
    var fn = new Function(document.getElementById("code").value) 
 
    alert("Great, that's a valid piece of code!") 
 
    } catch (e) { 
 
    alert("That's not a valid piece of code.") 
 
    } 
 
}
<input id="code"> 
 
<button onclick="checkIt()">Check it</button>

例如,嘗試 「123」,「有效「和」''不是[有效!!!]。

雖然如果你要馬上評估它,如果它是有效的,你應該檢查錯誤是否是語法錯誤,否則。

function doIt() { 
 
    var fn 
 

 
    try { 
 
    var result = eval(document.getElementById("code").value) 
 
    alert("The result is: " + result) 
 
    } catch (e) { 
 
    if (e instanceof SyntaxError) { 
 
     alert("That's not a valid piece of code.") 
 
    } else { 
 
     alert(e.message) 
 
    } 
 
    } 
 
}
<input id="code"> 
 
<button onclick="doIt()">Check it</button>

例如,嘗試你以前嘗試過同樣的事情,看看這種行爲。