未捕获类型错误:无法读取属性';toString';未定义的函数——javascript
我试图用javascript创建一个计算器,但每当我点击数字按钮时,我总是在控制台上收到一条错误消息“UncaughtTypeError:Cannotreadproperty'toString'of undefined”。同时,数字按钮不会以字符串形式显示。我做错了什么未捕获类型错误:无法读取属性';toString';未定义的函数——javascript,javascript,html,ecmascript-6,Javascript,Html,Ecmascript 6,我试图用javascript创建一个计算器,但每当我点击数字按钮时,我总是在控制台上收到一条错误消息“UncaughtTypeError:Cannotreadproperty'toString'of undefined”。同时,数字按钮不会以字符串形式显示。我做错了什么 //Javascript 类计算器{ 构造函数(PreviousOperationTextElement、CurrentOperationTextElement){ this.PreviousOperationTextElem
//Javascript
类计算器{
构造函数(PreviousOperationTextElement、CurrentOperationTextElement){
this.PreviousOperationTextElement=PreviousOperationTextElement;
this.currentOperatureTextElement=currentOperatureTextElement;
这个.clear();
}
清除(){
this.previousOperationElement='';
this.currentOperationElement='';
此操作=未定义;
}
删除(){
}
附录编号(编号){
this.currentOperator=this.currentOperator.toString()+number.toString();
}
选择操作(操作){
}
计算(){
}
updateDisplay(){
this.currentOperatureTextElement.innerText=this.currentOperator;
}
}
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 previousOperationTextElement=document.querySelector(“[data previous Operator]”);
const currentOperatureTextElement=document.querySelector(“[数据当前操作数]”);
const calculator=新计算器(currentOperatorTextElement,PreviousOperatorTextElement);
numberButtons.forEach(按钮=>{
按钮。addEventListener('单击',()=>{
计算器.appendNumber(按钮.innerText);
calculator.updateDisplay();
});
});代码>
//CSS
*,
*::之前,
*::之后{
框大小:边框框;
字体系列:高谭圆形,无衬线;
字体大小:正常;
}
身体{
填充:0;
保证金:0;
背景:线性梯度(向右,#722f37,#caa181);
}
.计算器网格{
显示:网格;
证明内容:中心;
对齐内容:居中对齐;
最小高度:100vh;
网格模板列:重复(4100px);
网格模板行:最小最大值(120px,自动)重复(5100px);
}
.计算器网格>按钮{
光标:指针;
字号:2rem;
边框:1px纯白;
大纲:无;
背景色:rgba(255、255、255、75);
}
.计算器网格>按钮:悬停{
背景色:rgba(255、255、255、.9);
}
.跨度2{
格构柱:跨度2;
}
.产出{
网格柱:1/-1;
背景色:rgba(51,35,35,0.397);
显示器:flex;
对齐项目:柔性端;
证明内容:周围的空间;
弯曲方向:立柱;
填充:10px;
单词包装:打断单词;
单词break:打破一切;
}
.output.previous操作数{
颜色:rgba(255、255、255、75);
字体大小:1.5rem;
}
.output.当前操作数{
颜色:白色;
字体大小:2.5rem;
}
计算器
自动控制
德尔
÷
1.
2.
3.
*
4.
5.
6.
+
7.
8.
9
-
.
0
=
您不初始化“当前操作数”
在第一次单击按钮时,您的this.currentOperator
没有任何值,因此它将是未定义的
变量。而未定义的变量没有toString属性。
因此,解决方案是,你需要在appendNumber函数中设置一个条件,如果变量未定义,那么变量只需填充number.toString
,就像下面的代码一样
appendNumber(数字){
if(this.currentOperator!=未定义){
this.currentOperator=this.currentOperator.toString()+number.toString();
}否则{
this.currentOperator=number.toString();
}
}
或者,如果您想让这更简单,您可以在构造函数中定义变量,因为基本上错误是由无法读取未定义的的属性“toString”引起的,因此我们只需要在第一个状态更改变量,将未定义的变量更改为具有
this.currentOperator='';
指定给this.currentOperator
的唯一位置是在引用this.currentOperator.toString()的行中
constructor(previousOperandTextElement, currentOperandTextElement) {
this.previousOperandTextElement = previousOperandTextElement;
this.currentOperandTextElement = currentOperandTextElement;
this.currentOperand = "";
this.clear();
}