如何在 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 错误。
尝试在控制台记录整个表达式,看看实际发生了什么。
这是代码沙盒: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 错误。 尝试在控制台记录整个表达式,看看实际发生了什么。