不使用eval在Javascript中声明简单条件

问题描述 投票:-1回答:1

我正在尝试构建一个可以解释简单条件的Javascript程序:

let condition = '5 + 6 > 10';
if( assert(condition) ){
  //... do something
} else {
  // ... do other thing
}

实现assert的一种简单但不安全的方法是简单地使用eval。它可以工作,但是会打开一个安全漏洞。我该如何解决?

我需要支持加减,字符串和数字比较以及括号管理。

javascript eval
1个回答
0
投票

有几种选择:

  • 您可以手动为表达式编写标记器和解析器。对于这样的简单语法,这并不复杂,实际上是编程中的一个很好的练习]]

  • 或者,您可以使用解析器生成器,例如pegnearley。使用生成器,您可以使用特定语言编写语法,然后让生成器为您创建解析函数。看看他们的例子:https://pegjs.org/onlinehttps://github.com/kach/nearley/tree/master/examples/calculator

  • 最后,您可以使用成熟的Javascript解析器,例如esprimaacorn。这样,您将获得完整的javascript AST,您可以边走边进行计算。此方法比其他方法复杂得多,但是可以在表达式中提供javascript的全部功能,例如函数,正则表达式等。

© www.soinside.com 2019 - 2024. All rights reserved.