因此,我创建了一个计算器,并且我的equals按钮使用eval()函数。我正在寻找使用eval函数的替代方法,因为我不断收到有关使用eval危险的安全警告。这是否意味着有人可以通过我的“相等”按钮来入侵我的计算机?
该代码可以在计算器基础组件here的第51行找到:
handleEquals() {
this.setState(prevState => {
return {
output: isNaN(prevState.output.toString().slice(-1))
? prevState.output
: eval(prevState.output)
}
})
}
答案 0 :(得分:1)
您将需要解析表达式。您可以自行执行此操作,也可以使用math.js
之类的库(请参见this示例。
尽管我不建议您为这些表达式编写自己的解析器,但我发现这是一篇看起来可以帮助您入门的文章:https://www.freecodecamp.org/news/parsing-math-expressions-with-javascript-7e8f5572276e/
另一种解决方法是自动标记该术语,而不是创建字符串。我的意思是将键入计算器的每个术语存储在一个对象或类似对象中。您仍然需要解析令牌,但之后无需解析字符串。