在这种情况下,使用eval()的替代方法是什么?还有其他选择吗?

时间:2019-12-10 13:59:26

标签: javascript reactjs

因此,我创建了一个计算器,并且我的equals按钮使用eval()函数。我正在寻找使用eval函数的替代方法,因为我不断收到有关使用eval危险的安全警告。这是否意味着有人可以通过我的“相等”按钮来入侵我的计算机?

该代码可以在计算器基础组件here的第51行找到:

handleEquals() {
  this.setState(prevState => {
    return {
      output: isNaN(prevState.output.toString().slice(-1))
        ? prevState.output
        : eval(prevState.output)
    }
  })
}

1 个答案:

答案 0 :(得分:1)

您将需要解析表达式。您可以自行执行此操作,也可以使用math.js之类的库(请参见this示例。

尽管我不建议您为这些表达式编写自己的解析器,但我发现这是一篇看起来可以帮助您入门的文章:https://www.freecodecamp.org/news/parsing-math-expressions-with-javascript-7e8f5572276e/

另一种解决方法是自动标记该术语,而不是创建字符串。我的意思是将键入计算器的每个术语存储在一个对象或类似对象中。您仍然需要解析令牌,但之后无需解析字符串。