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

标签 javascript reactjs redux react-redux eval

这是代码沙箱: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,

但是当我这样的时候,我得到“意外的 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("(" + "7 + 3" + ")" + "* 2")
// 20

因此,您可能对从切片返回的值做了错误的操作,从而导致 eval 错误。 尝试控制台记录整个表达式以查看实际发生的情况。

关于javascript - 如何在 eval 语句中插入括号以对 JavaScript 中的操作进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468380/

相关文章:

javascript - react Bootstrap 组件开关不工作

javascript - 如何突出显示 react 构建列表中的部分列表项

javascript - onChange 事件在 Mozilla 和 IE React js/Redux 中未触发

javascript - 无法在同一页面上调用第二个 javascript 函数(名称不同)

javascript - JSDoc 中是否有 Implements 或 Extends 注释?

javascript - 事件委托(delegate): can someone explain me this JavaScript code?

javascript - React 动态更新数组并将其传递给子组件

javascript - 生成唯一的数字

reactjs - 样式组件的多个 Props 选项

json - Redux & Immutable.js - 从 json 设置状态