我必须为一项非常具体的任务处理客户的 Javascript 框架。
我有这个 html:
<div data-foo="(#a = #b)">...loading</div>
在 Javascript 中,我将 data-*
-Attribute 作为字符串获取:
foo = '(#a = #b)'
然后使用以下答案进行 ajax 调用:
#a=1, #b=1
接下来,标签被 ajax 调用的值替换(运算符也被替换):
foo = '(1 == 1)'
然后 foo
被 eval() 求值;
result = eval(foo) // true
有没有办法避免eval()
?我总是需要评估像 '(0 == 1)'
或 '((0 == 0) && (1 == 0))'
这样的字符串。我没有机会影响服务器响应。我需要一种安全可靠的方法来将字符串评估为 true
或 false
。
编辑:
可能的字符串是:
'(0 == 0)'
'(0 == 1)'
'(0 > 5)'
'(117 > 0)'
'((0 == 1) && (11 == 11))'
'((0 == 1) || (0 == 0))'
'(((0 < 1) || (0 == 0) ) && (33 != 11))'
...and so on!
结果始终需要为 true
或 false
。
最佳答案
以下是一些可能会解决您的问题的资源:
- > http://mathjs.org/
- > http://jsep.from.so/
- > http://silentmatt.com/javascript-expression-evaluator/
还有很多。搜索“javascript expression parser”。
关于javascript:我可以在这个例子中避免 eval 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16821475/