js实现四则运算
实现四则运算的基本方法
在JavaScript中实现四则运算可以通过多种方式完成,包括直接使用运算符、eval函数或解析表达式。以下是几种常见的方法:
直接使用运算符
JavaScript原生支持加减乘除运算符,可以直接使用:
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
const multiply = (a, b) => a * b;
const divide = (a, b) => a / b;
使用eval函数
eval可以解析字符串形式的表达式,但存在安全风险,需谨慎使用:
const calculate = (expression) => eval(expression);
console.log(calculate("2 + 3 * 4")); // 输出14
安全解析表达式的方法
为避免eval的安全问题,可以手动解析表达式。以下是一个简单的实现思路:

构建词法分析器
将输入字符串拆分为数字和运算符:
function tokenize(expression) {
return expression.match(/(\d+|\+|\-|\*|\/)/g);
}
实现优先级处理

通过栈处理乘除优先:
function evaluate(tokens) {
const stack = [];
let i = 0;
while (i < tokens.length) {
const token = tokens[i];
if (token === '*' || token === '/') {
const left = stack.pop();
const right = tokens[++i];
stack.push(token === '*' ? left * right : left / right);
} else if (!isNaN(token)) {
stack.push(parseFloat(token));
}
i++;
}
let result = stack[0] || 0;
for (let j = 1; j < stack.length; j += 2) {
result += stack[j] === '+' ? stack[j+1] : -stack[j+1];
}
return result;
}
处理复杂表达式
对于带括号的表达式,可使用递归或栈处理优先级:
function parseWithParentheses(expr) {
const stack = [];
let current = [];
for (const char of expr) {
if (char === '(') {
stack.push(current);
current = [];
} else if (char === ')') {
const value = evaluate(current);
current = stack.pop();
current.push(value);
} else {
current.push(char);
}
}
return evaluate(current);
}
使用现成库
对于生产环境,推荐使用成熟的数学表达式库如:
math.jsexpr-eval
安装math.js示例:
import { evaluate } from 'mathjs';
console.log(evaluate("2 + (3 * 4)")); // 输出14
注意事项
- 浮点数精度问题需处理,例如
0.1 + 0.2 !== 0.3。 - 自定义解析时需验证输入合法性,防止注入攻击。
- 复杂场景建议优先使用专业库。






