如何在 eval 语句中插入括号以对 JavaScript 中的操作进行排序?

How to insert parentheses in an eval statement to order operations in JavaScript?

这是代码沙盒:https://codesandbox.io/s/rw0j2orqmp

它所在的文件是 reducers.js

我正在构建一个 React/Redux 计算器应用程序,目前我正在使输出显示当前状态下计算的结果。它在没有括号的情况下工作,但计算整个公式而不是一次计算一个部分。为了解决这个问题,我想把每一部分都放在括号中,让它单独计算,取消方法,然后在第一部分完成计算时把它贴回去:

value:
          methods.indexOf(state.lastValue) < 0
            ? eval("(" + state.calc.slice(0, -1) + ")" + state.calc.slice(-1) + state.value)
            : state.value,

但是当我这样的时候,我得到 "Unexpected token ) " 。

有没有更简单的方法来完成我想做的事情,或者在这种情况下是否有 eval() 的功能替代品?

我不确定你为什么在这里使用 eval 或括号。这对你不起作用有什么原因吗?:

methods.indexOf(state.lastValue) < 0
  ? state.calc.slice(0, -1) + state.calc.slice(-1) + state.value
  : state.value

如果您需要将事物组合在一起,只需使用不带 eval 的括号。

methods.indexOf(state.lastValue) < 0
  ? ((state.calc.slice(0, -1)) + state.calc.slice(-1) + state.value)
  : state.value

更新:我明白你在说什么,抱歉,从你原来的解释中很难理解,我在我的手机上,无法真正检查你的沙箱.

我认为最好保留一个您可以在以后简单计算的字符串,例如,如果您存储了 "7 + 3" 并按 *,则将原始字符串换行括号并添加 *,结果为 "(7 + 3) *",等等。然后,无论何时您想要显示结果,您只需评估单个存储的计算。

如果你坚持那样做 eval,我会告诉你它有效。例如,在控制台中试试这个:

eval("(" + "7 + 3" + ")" + "* 2")
// 20

所以您可能对从切片返回的值做错了,这会导致 eval 错误。 尝试在控制台记录整个表达式,看看实际发生了什么。