不用 + eval Function 实现加法

49 阅读1分钟

"```markdown

不用 eval Function 实现加法

在JavaScript中,通常我们使用 eval() 函数来动态计算字符串表达式,但出于安全和性能的考虑,建议避免使用 eval()。本文将介绍一些不使用 eval() 函数实现加法的方法。

方法一:使用函数解析

我们可以通过定义一个简单的解析函数,将输入字符串解析为数值并进行加法计算。

function add(expression) {
    // 使用正则表达式分割数字
    const numbers = expression.match(/-?\\d+(\\.\\d+)?/g);
    if (!numbers) return 0;
    return numbers.reduce((sum, num) => sum + parseFloat(num), 0);
}

console.log(add(\"12 + 5 + 3.5\")); // 输出: 20.5

方法二:将字符串转换为数组

可以将字符串分割成数组,然后使用 Array.prototype.reduce() 方法进行累加。

function add(expression) {
    const numbers = expression.split('+').map(num => parseFloat(num));
    return numbers.reduce((sum, num) => sum + num, 0);
}

console.log(add(\"10 + 20 + 30\")); // 输出: 60

方法三:使用 Function 构造器

虽然不推荐,但可以使用 Function 构造器来计算表达式。

function add(expression) {
    const func = new Function('return ' + expression);
    return func();
}

console.log(add(\"5 + 15 + 25\")); // 输出: 45

方法四:手动解析

手动解析字符串,处理加法运算符。

function add(expression) {
    let sum = 0;
    let currentNum = '';

    for (const char of expression) {
        if (char === '+') {
            sum += parseFloat(currentNum);
            currentNum = '';
        } else if (!isNaN(char) || char === '.') {
            currentNum += char;
        }
    }
    sum += parseFloat(currentNum); // 加上最后一个数字
    return sum;
}

console.log(add(\"8 + 12 + 7.5\")); // 输出: 27.5

总结

上述方法展示了如何在JavaScript中实现加法而不使用 eval() 函数。每种方法都有自己的优缺点,选择合适的方法可以提高代码的安全性和可维护性。在实际开发中,使用简单的字符串解析和数值转换是最推荐的方式。