我的意思是只能进行逻辑和数学运算的函数,例如:3+5<=9
,"string"=="string" && (3<9 || 12>3)
,但不是这个a+b<c
,"string".length > 3
或调用函数,所以程序员必须在评估之前解析(通过正则表达式或其他方式)所有可能的名称?
编辑:
所以我发现使用eval()的一个很好的理由......
答案 0 :(得分:2)
Tbh我认为对你的问题最简单的回答是“没有”。
你可以自己编写一个,找到一个(它将是一个JS库) - 或者获得一个解析器生成器来生成一个可以在Javascript上运行的解析器。
ANTLR就是这样一个工具/平台 - 你会在downloads page上找到Javascript运行时下载。然而,您将需要ANTLRWorks工具才能掌握它,并产生实际有效的gammar。
一旦你知道自己在做什么,就可以在几分钟内启动并运行一个基本的数学解析器(支持四个主要运算符)。
答案 1 :(得分:0)
是的,有一个解决方案:只需创建一个新的函数对象,它的优势在于它不会污染范围......它看起来更安全:https://stackoverflow.com/a/7650148/393087
是的,我知道,这不是我真正想要的,但在安全方面更接近正确的方向。