使用 toString 属性时出现类型错误“无法读取属性/未定义”

时间:2021-01-25 03:15:35

标签: javascript

我目前正在尝试编写一个基本的计算器,但我撞到了一堵墙。我试图在输出上显示多个数字,我确实在 clear() 中将 currentOperand 声明为一个空变量。在 appendNumber() 中,如果我将 this.currentOperand 设置为 number ,它将只显示一位数。建议在 this.currentOperand 中返回一个字符串值以输出多个数字。

JS代码

    constructor(previousoperandTextElement, currentoperandTextElement){
        this.previousoperandTextElement = previousoperandTextElement
        this.currentoperandTextElement = currentoperandTextElement
    }
    clear(){
        this.currentOperand = "";
        this.previousOperand = "";
        this.operation = undefined; 
    }
    
    delete(){

    }
    appendNumber(number){
        if(number === "." && this.currentOperand.includes('.')) return
        this.currentOperand = this.currentOperand.toString() + number.toString()
        console.log(number);
    }
    chooseOperation(operation){

    }
    compute(){

    }
    updateDisplay(){
        this.currentoperandTextElement.innerText = this.currentOperand;
    }
}

const numberButtons = document.querySelectorAll("[data-number]")
const operationButtons = document.querySelectorAll("[data-operation]")
const deleteButton = document.querySelector("[data-delete]")
const all_clearButton = document.querySelector("[data-all-clear]")
const equalsButton = document.querySelector("[data-equals]")
const previousoperandTextElement = document.querySelector("[data-previous-operand]")
const currentoperandTextElement = document.querySelector("[data-current-operand]")

const calculator = new Calculator(previousoperandTextElement, currentoperandTextElement)

numberButtons.forEach(button => {
    button.addEventListener('click', () => {
        calculator.appendNumber(button.innerText);
        calculator.updateDisplay();
    })
})

1 个答案:

答案 0 :(得分:1)

当前操作数是否已经不是字符串?因此您无需将其转换为字符串。

所以

this.currentOperand = this.currentOperand + number.toString()

您也可以在转换为字符串之前先在控制台中检查类型,以确定您要转换的内容:

console.log(typeof this.currentOperand);

如果你使用 Typescript,这些事情也会更清楚。

编辑 回过头来看它,变量 number 看起来也是一个字符串。如果它将严格等于“。” - 您正在尝试将包含 . 的字符串转换为已经存在的字符串。