首页 > 解决方案 > 为什么我的函数总计在计算器中不起作用

问题描述

我需要一点帮助。我刚开始使用 Javascript 编程。我正在尝试做一个计算器。我对“=”有疑问。当我点击它时,不要给我看分数。请告诉我,我哪里做错了?

这是我的 git:https ://github.com/madzikowael/calculator/blob/main/script.js



const calculate = () => {
    let action;
    if(!previousOperation || !actualOperation) {
        return
    }

    const previous = parseFloat(previousOperation)
    const actual = parseFloat(actualOperation)

    if(isNaN(previous) || isNan(actual)){
        return
    }

    switch (operation) {
        case '+':
            action = previous + actual
            break
        case '-':
            action = previous - actual
            break
        case '×':
            action = previous * actual
            break 
        case '÷':
            if(actual === 0) {
                deleteScore()
                return 
            }
            action = previous / actual
            break
        case '^':
            action = Math.pow(previous, actual)
            break
        case '√':
            action = Math.pow(previous, 1 / actual)
            break
        case '%':
            action = previous / 100 * actual
            break
        case 'log':
            action = Math.log(previous) / Math.log(actual)
            break
        default:
            return
    }

    actualOperation = action
    operation = undefined
    previousOperation = ''
}

const chooseOperation = (operator) => {
    if(actualOperation === '') {
        return
    }
    if(previousOperation !== '') {
        const previous = previousOperation.innerText
        if(actualOperation.toString() === '0' && previous[previous.length - 1] === '÷') {
            deleteScore()
            return
        }
        calculate()
    }

    operation = operator;
    previousOperation = actualOperation;
    actualOperation = '';
}


const updateScore = () => {
    actualScore.innerText = actualOperation;

    if(operation != null) {
     previousScore.innerText = previousOperation + operation
    } else {
        previousScore.innerText = ''
    }
    
 }


numbers.forEach((numb) => {
    numb.addEventListener('click', () => {
        addNumber(numb.innerText);
        updateScore();
    })
})

del.addEventListener('click', () => {
    deleteNumber();
    updateScore();
})

operators.forEach((operator) => {
    operator.addEventListener('click', () => {
        chooseOperation(operator.innerText);
        updateScore();
    })
})

total.addEventListener('click', () => {
    calculate();
    updateScore();
})

clean.addEventListener('click', () => {
    deleteScore();
    updateScore();
})

标签: javascriptcalculator

解决方案


这是因为这条线:

if(isNaN(previous) || isNan(actual)){
     return
}

该功能isNan()不存在。因此抛出错误并calculate()中止该函数。

将其替换为:

if(isNaN(previous) || isNaN(actual)){
     return
}

推荐阅读