js实现四则运算
使用 eval 快速实现
通过 eval 直接解析字符串表达式,但需注意安全性风险(避免用户输入恶意代码)。

const expression = "2 + 3 * 4";
const result = eval(expression);
console.log(result); // 输出 14
安全解析:Function 构造函数
利用 Function 构造函数限制执行环境,比 eval 更安全。

const calculate = (expr) => new Function(`return ${expr}`)();
console.log(calculate("10 / 2 + 1")); // 输出 6
手动解析实现
通过栈或递归下降法实现表达式解析,避免依赖 eval。
function parseExpression(expr) {
const tokens = expr.match(/(\d+|\+|\-|\*|\/|\(|\))/g);
let index = 0;
const parseValue = () => {
if (tokens[index] === "(") {
index++;
const value = parseAddSub();
index++;
return value;
}
return parseFloat(tokens[index++]);
};
const parseMulDiv = () => {
let left = parseValue();
while (index < tokens.length && ["*", "/"].includes(tokens[index])) {
const op = tokens[index++];
const right = parseValue();
left = op === "*" ? left * right : left / right;
}
return left;
};
const parseAddSub = () => {
let left = parseMulDiv();
while (index < tokens.length && ["+", "-"].includes(tokens[index])) {
const op = tokens[index++];
const right = parseMulDiv();
left = op === "+" ? left + right : left - right;
}
return left;
};
return parseAddSub();
}
console.log(parseExpression("3 + 5 * (2 - 1)")); // 输出 8
使用第三方库
引入 mathjs 等库处理复杂表达式,支持更丰富的数学功能。
import { evaluate } from "mathjs";
console.log(evaluate("2 ^ (3 + 1)")); // 输出 16
注意事项
- 避免直接使用
eval处理用户输入,防止代码注入。 - 手动解析需处理运算符优先级(乘除优先于加减)和括号嵌套。
- 复杂需求(如变量、函数)建议使用专业库如
mathjs或expr-eval。






