JavaScript中能否将算术运算符存入变量后直接用于计算?
可行实现方案
你想要的动态运算符计算有两种主流实现方式,直接写num1 变量 num2的语法在JavaScript中本身不支持,运算符是语法层面的固定标记,不能在运行时用变量直接替换,所以你之前的错误写法本身就不符合JS语法规范。
方案1:eval快速实现(仅推荐完全可控的非用户输入场景)
直接把拼接好的表达式传入eval执行即可得到结果:
const num1 = 10; const num2 = 4; const operator = `*`; const result = eval(`${num1} ${operator} ${num2}`); console.log(result); // 输出40
注意:如果operator的值来自用户输入,这个方案会有代码注入的安全风险,不要在生产环境的外部输入场景使用。
方案2:对象映射实现(生产环境推荐,无安全风险)
提前把所有支持的运算符和对应的计算逻辑存到对象中,通过运算符变量取值调用即可:
const num1 = 10; const num2 = 4; const operator = `*`; // 提前定义所有支持的运算符逻辑 const opMap = { '+': (a, b) => a + b, '-': (a, b) => a - b, '*': (a, b) => a * b, '/': (a, b) => a / b, '%': (a, b) => a % b, '**': (a, b) => a ** b }; // 可以先做合法性校验 if (!opMap[operator]) { throw new Error(`不支持的运算符: ${operator}`); } const result = opMap[operator](num1, num2); console.log(result); // 输出40
这个方案性能优于eval,没有安全隐患,还可以灵活扩展支持自定义运算符逻辑。
内容的提问来源于stack exchange,提问作者DaisyMayDev
相关产品推荐
相关产品推荐

