Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未捕获类型错误:无法读取属性';toString';未定义的函数——javascript_Javascript_Html_Ecmascript 6 - Fatal编程技术网

未捕获类型错误:无法读取属性';toString';未定义的函数——javascript

未捕获类型错误:无法读取属性';toString';未定义的函数——javascript,javascript,html,ecmascript-6,Javascript,Html,Ecmascript 6,我试图用javascript创建一个计算器,但每当我点击数字按钮时,我总是在控制台上收到一条错误消息“UncaughtTypeError:Cannotreadproperty'toString'of undefined”。同时,数字按钮不会以字符串形式显示。我做错了什么 //Javascript 类计算器{ 构造函数(PreviousOperationTextElement、CurrentOperationTextElement){ this.PreviousOperationTextElem

我试图用javascript创建一个计算器,但每当我点击数字按钮时,我总是在控制台上收到一条错误消息“UncaughtTypeError:Cannotreadproperty'toString'of undefined”。同时,数字按钮不会以字符串形式显示。我做错了什么

//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();
  }