是否有一个更安全的类似于eval的函数在javascript中无法解析变量?

时间:2012-08-09 13:19:35

标签: javascript eval

我的意思是只能进行逻辑和数学运算的函数,例如:3+5<=9"string"=="string" && (3<9 || 12>3),但不是这个a+b<c"string".length > 3或调用函数,所以程序员必须在评估之前解析(通过正则表达式或其他方式)所有可能的名称?

编辑:

所以我发现使用eval()的一个很好的理由......

2 个答案:

答案 0 :(得分:2)

Tbh我认为对你的问题最简单的回答是“没有”。

你可以自己编写一个,找到一个(它将是一个JS库) - 或者获得一个解析器生成器来生成一个可以在Javascript上运行的解析器。

ANTLR就是这样一个工具/平台 - 你会在downloads page上找到Javascript运行时下载。然而,您将需要ANTLRWorks工具才能掌握它,并产生实际有效的gammar。

一旦你知道自己在做什么,就可以在几分钟内启动并运行一个基本的数学解析器(支持四个主要运算符)。

答案 1 :(得分:0)

是的,有一个解决方案:只需创建一个新的函数对象,它的优势在于它不会污染范围......它看起来更安全:https://stackoverflow.com/a/7650148/393087

是的,我知道,这不是我真正想要的,但在安全方面更接近正确的方向。