2015-12-01 16 views
1

有沒有辦法翻譯像下面的邏輯操作(由於用戶輸入使用字符串)?或者我將不得不檢查每一種可能性? (> < => == = <等)將字符串轉換爲javascript中的操作

var x = 5; 
var y = 3; 
var operator = '>' 

if (x operator y) 
    doSomething(); 

    | 
    | 
    v 

if (x > y) 
    doSomething(); 
+0

你可以使用eval(),但這對用戶輸入來說是邪惡的。 – Raman

回答

0

你可以使用eval,提供你知道它是邪惡的。儘管你一定要檢查輸入是否有效,例如檢查它是否只包含'> < ='字符。

+0

eval完美適用於此目的(測試時),我們上線時不確定它是否真的安全 –

+0

是否有可能與其他人共享此輸入,例如通過URL?在這種情況下避免它,完全放棄這個答案。如果用戶必須在文本框中自己填寫值,我個人沒有看到任何問題。當你欺騙別人執行任意腳本時,這是一個問題,當它只是你自己的客戶端時,它是無害的。 – TJHeuvel

+0

它將用於Web應用程序,用戶可以在其中創建自己的小型(簡單)應用程序以使用數據。 –

5

是,與對象和相應的功能,像

var comparer = { 
    '>': function (a, b) { return a > b; } 
}; 

用途:

if (comparer[operator](x, y)) { 
    doSomething(); 
} 
0

你應該改變自己的方式。
使用eval您必須將所有操作員列入白名單,並對兩個輸入進行消毒。

根據您的需求構建您自己的界面。
可能會switch

switch (operator) { 
    case '>': if (x > y) doSomething(); 
} 

可能會有一些更抽象,如:

ifArg(x).relatedWith(y).as(operator).then(doSomething); 

可即使你寫你自己的小翻譯(語法/詞法分析器)和您的用戶可以在其上編寫程序。

它將用於Web應用程序,用戶可以在其中創建自己的 小型(簡單)應用程序以使用數據。 - Mathieu Brouwers

你不應該在這裏使用的是eval