当前位置:首页 > JavaScript

js实现四则运算

2026-03-01 11:45:51JavaScript

实现四则运算的基本方法

在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的安全问题,可以手动解析表达式。以下是一个简单的实现思路:

js实现四则运算

构建词法分析器

将输入字符串拆分为数字和运算符:

function tokenize(expression) {
    return expression.match(/(\d+|\+|\-|\*|\/)/g);
}

实现优先级处理

js实现四则运算

通过栈处理乘除优先:

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.js
  • expr-eval

安装math.js示例:

import { evaluate } from 'mathjs';
console.log(evaluate("2 + (3 * 4)")); // 输出14

注意事项

  • 浮点数精度问题需处理,例如0.1 + 0.2 !== 0.3
  • 自定义解析时需验证输入合法性,防止注入攻击。
  • 复杂场景建议优先使用专业库。

标签: js
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…