2013-11-28 42 views
0

在JavaScript中編寫函數。該計劃是該函數創建一個對象,它需要布爾語句作爲參數。像這樣 - >這是eval邪惡嗎?

var foo = new fuzz("pie < squirrel", "monkey === banana"); 

我的問題是 - 這是邪惡?

* 注 - *在函數'fuzz'中,我將運行對參數值的檢查。 (檢查字符串長度等)。我認爲這就是eval的使用方式,它在t'up網站上的聲譽如此糟糕。

感謝

+4

爲什麼不將這些語句作爲匿名函數傳遞? – helpermethod

+6

您顯示的代碼不是。你實際使用'eval'的代碼本身可能不是。但也許有一個更好的解決方案,根本不需要'eval'。我們不能沒有更多的上下文。 – deceze

+2

這些值來自用於布爾表達式的值?是否有任何理由你不能只傳遞布爾值? – Guffa

回答

3

總結註釋中的結論:寫一個簡單的規則評估引擎!例如: -

var variables = { ... }; 

function niceEval(condition) { 
    var operands = condition.match(/(\w+)\s+(\S+)\s+(\w+)/); 

    switch (operands[2]) { 
     case '<' : 
      return variables[operands[1]] < variables[operands[3]]; 
     ... 
    } 
} 

這也爲您提供了比盲目eval荷蘭國際集團的字符串可能出現的錯誤,更多的控制。

+0

是的,這是美麗的傢伙。謝謝。 – User2