gpt4 book ai didi

javascript - 无法读取未定义的属性 'toString', 'isNan'

转载 作者:行者123 更新时间:2023-12-03 12:38:06 25 4
gpt4 key购买 nike

我一直反复收到此错误,但无法找到确切的原因。
错误是:

Cannot read property 'toString' of undefined
at Calculator.appendNumber (calc.js:16)
at HTMLButtonElement.<anonymous> (calc.js:96)
这与 toStringisNan一起发生
这是我的HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="calc.css">
<title>Calculator</title>
</head>
<body>
<div class="calculator_grid">
<div class="output">
<div data-previous-operand class="previous_operand"></div>
<div data-current-operand class="current_operand"></div>
</div>
<button data-all-clear class="span_two">AC</button>
<button data-delete >Del</button>
<button data-operation>/</button>
<button data-number>1</button>
<button data-number>2</button>
<button data-number>3</button>
<button data-operation>*</button>
<button data-number>4</button>
<button data-number>5</button>
<button data-number>6</button>
<button data-operation>+</button>
<button data-number>7</button>
<button data-number>8</button>
<button data-number>9</button>
<button data-operation>-</button>
<button data-number>.</button>
<button data-number>0</button>
<button data-equals class="span_two">=</button>
</div>
<script type="text/javascript" src="calc.js">
</script>
</body>
</html>
这是我的Javascript:
class Calculator {
constructor(previousOperandTextElement, currentOperandTextElement) {
this.previousOperandTextElement = previousOperandTextElement
this.currentOperandTextElement = currentOperandTextElement
}
clear(){
this.currentOperand = ''
this.previousOperand = ''
this.operation = undefined
}
delete(){
this.currentOperand = this.currentOperand.toString().slice(0, -1)
}
appendNumber(number){
if (number === '.' && this.currentOperand.includes('.')) return
this.currentOperand = this.currentOperand.toString() + number.toString()
}
chooseOperation(operation){
if (this.currentOperand === '') return
if (this.previousOperand !== ''){
this.compute()
}
this.operation = operation
this.previousOperand = this.currentOperand
this.currentOperand = ''

}
compute(){
let computation
const prev = parseFloat(this.previousOperand)
const current = parseFloat(this.currentOperand)
if(isNan(prev) || isNaN(curent)) return
switch(this.operation){
case '+':
computation = prev + current
break
case '-':
computation = prev - current
break
case '/':
computation = prev / current
break
case '*':
computation = prev * current
break
default:
return
}
this.currentOperand = computation
this.operation = undefined
this.previousOperand = ''
}

getDisplayNumber(number) {
const stringNumber = number.toString()
const integerDigits = parseFloat(stringNumber.split('.')[0])
const decimalDigits = (stringNumber.split('.')[1])
let integerDisplay
if (isNan(integerDigits)) {
integerDisplay = ''
} else {
integerDisplay = integerDigits.toLocaleString('en',{ maximumFractionDigits: 0})
}
if(decimalDigits != null){
return `${intgerDisplay}.${decimalDigits}`
} else {
return integerDisplay
}
}

updateDisplay(){
this.currentOperandTextElement.innerText = this.getDisplayNumber(currentOperand)
if (this.operation != null ) {
this.previousOperandTextElement.innerText =
`${this.getDisplayNumber(this.previousOperand)} ${this.operation}`
} else {
this.previousOperandTextElement.innerText = ''
}
}

}


const numberButtons = document.querySelectorAll('[data-number]')
const operationButtons = document.querySelectorAll('[data-operation]')
const equalsButton = document.querySelector('[data-equals]')
const deleteButton = document.querySelector('[data-delete]')
const allClearButton = document.querySelector('[data-all-clear]')
const previousOperandTextElement = document.querySelector('[data-previous-operand]')
const currentOperandTextElement = document.querySelector('[data-current-operand]')
const previousOperand = document.querySelector('[data-previous-operand]')
const currentOperand = document.querySelector('[data-current-operand]')

const calculator = new Calculator (previousOperandTextElement, currentOperandTextElement)

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

operationButtons.forEach(button =>{
button.addEventListener('click', () =>{
calculator.chooseOperation(button.innerText)
calculator.updateDisplay()
})
})

equalsButton.addEventListener('click', button => {
calculator.compute()
calculator.updateDisplay()
})

allClearButton.addEventListener('click', button => {
calculator.clear()
calculator.updateDisplay()
})

deleteButton.addEventListener('click', button => {
calculator.delete()
calculator.updateDisplay()
})

我正在使用Electron,对于解决此问题的任何帮助将不胜感激。

最佳答案

请使用

button && button.innerText && calculator.appendNumber(button.innerText)
添加带有 calculator.appendNumber(button.innerText)的支票

关于javascript - 无法读取未定义的属性 'toString', 'isNan',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65552443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com