Javascript 简单计算器项目的意外输出
我对以下程序的预期输出作为输入示例(1+2=):Javascript 简单计算器项目的意外输出,javascript,Javascript,我对以下程序的预期输出作为输入示例(1+2=): console.log(currentNumber)=1 console.log(currentOperator)=+ console.log(nextNumber)=2 console.log(operatorActive)=false 然而,我得到: console.log(currentNumber)=2*** console.log(currentOperator)=+ console.log(nextNumber)=未定义***
- console.log(currentNumber)=1
- console.log(currentOperator)=+
- console.log(nextNumber)=2
- console.log(operatorActive)=false
然而,我得到:
- console.log(currentNumber)=2***
- console.log(currentOperator)=+
- console.log(nextNumber)=未定义***
- console.log(operatorActive)=false
***=意外输出
我试着让计算器在输入这些值后显示3。很明显,console.log显示的是另一种情况。我似乎不知道我的代码出了什么问题。非常感谢你的帮助
//用于计算的函数(+、-、*、/)
常数加=(a,b)=>a+b;
常量减法=(a,b)=>a-b;
常数乘法=(a,b)=>a*b;
常数除法=(a,b)=>a/b;
常量运算=(运算符,a,b)=>{
开关(操作员){
格“+”:
返回添加(a,b);
案例“-”:
返回减法(a,b);
案例“×”:
返回乘法(a,b);
案例“÷”:
返回除法(a,b);
}
};
//用户界面按钮和显示的DOM选择
常量编号=document.queryselectoral(“.number”);
const operators=document.queryselectoral(“.operator”);
const equals=document.querySelector(“.equals”);
const display=document.querySelector(“.output”);
//单击按钮时事件侦听器的函数。。。
让我们来看看这个数字;
让电流算符;
让下一个数字;
让运算符active=false;
// ... 用于数字按钮
函数clickNumber(){
数字。forEach((数字)=>{
如果(!运算符活动){
number.addEventListener('单击',()=>{
display.textContent+=number.textContent;
currentNumber=display.textContent;
})
}else if(运算符活动){
number.addEventListener('单击',()=>{
display.textContent+=number.textContent;
nextNumber=display.textContent;
})
}
});
}
// ... 用于操作员按钮
函数clickOperator(){
运算符。forEach((运算符)=>{
operator.addEventListener('click',()=>{
currentOperator=operator.textContent;
display.textContent=“”;
运算符活动=真;
})
});
}
// ... “相等”按钮
函数clickEquals(x,y,z){
equals.addEventListener('click',()=>{
运算符活动=假;
//**控制台日志下面是测试,以查看哪些值有效
console.log(当前编号);
控制台日志(currentOperator);
console.log(下一个编号);
控制台日志(操作员活动);
display.textContent=operate(x,parseInt(y),parseInt(z));
})
}
//在第页上运行事件侦听器
单击数字();
单击运算符();
单击等于(currentOperator、currentNumber、nextNumber)代码>
*,*::之前,*::之后{
框大小:边框框;
字体系列:高谭圆形,无衬线;
字号:500;
}
身体{
背景:线性梯度(向右,#af8baf,#00909e);
填充:0;
保证金:0;
}
/*计算器的网格系统设置*/
.计算器{
显示:网格;
网格模板柱:1fr 1fr 1fr 1fr;
网格模板行:1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
填充:10px;
边界半径:10px;
/*计算器的定位*/
背景色:黑色;
宽度:300px;
高度:400px;
保证金:自动;
边缘顶部:100px;
}
.跨度2{
网格柱:1/3;
}
/*计算器设计*/
.产出{
网格柱:1/5;
背景色:黑色;
颜色:白色;
字号:2rem;
溢出包装:断开单词;
文本对齐:右对齐;
}
钮扣{
字体大小:20px;
边界半径:5px;
边框颜色:灰色;
背景颜色:灰色;
颜色:白色;
保证金:2倍;
大纲:无;
}
按钮:激活{
背景颜色:浅灰色;
}
计算器
自动控制
德尔
+/-
÷
7.
8.
9
×
4.
5.
6.
-
1.
2.
3.
+
0
.
=
您的主要问题是:
function clickNumber() {
numbers.forEach((number) => {
if (!operatorActive) {
number.addEventListener('click', () => {
display.textContent += number.textContent;
currentNumber = display.textContent;
})
} else if (operatorActive) {
number.addEventListener('click', () => {
display.textContent += number.textContent;
nextNumber = display.textContent;
})
}
});
}
您在开始时调用此函数来设置数字的侦听器,但在那一刻,operatorActive
始终为false。因此,所有的数字只得到第一个侦听器,并且总是表现得好像没有操作员处于活动状态。我想你想要的是:
function clickNumber() {
numbers.forEach((number) => {
number.addEventListener('click', () => {
if (!operatorActive) {
display.textContent += number.textContent;
currentNumber = display.textContent;
} else {
display.textContent += number.textContent;
nextNumber = display.textContent;
}
});
});
}
当click listener运行时,需要检查operatorActive
。在加载程序时添加侦听器时,您正在检查它,此时它将始终为false
类似地,=
的单击侦听器需要获取所有变量的当前值。调用clickEquals()
时传递的是初始值,它们不会改变
//用于计算的函数(+、-、*、/)
常数加=(a,b)=>a+b;
常量减法=(a,b)=>a-b;
常数乘法=(a,b)=>a*b;
常数除法=(a,b)=>a/b;
常量运算=(运算符,a,b)=>{
开关(操作员){
格“+”:
返回添加(a,b);
案例“-”:
返回减法(a,b);
案例“×”:
返回乘法(a,b);
案例“÷”:
返回除法(a,b);
}
};
//用户界面按钮和显示的DOM选择
常量编号=document.queryselectoral(“.number”);
const operators=document.queryselectoral(“.operator”);
const equals=document.querySelector(“.equals”);
const display=document.querySelector(“.output”);
//单击按钮时事件侦听器的函数。。。
让我们来看看这个数字;
让电流算符;
让下一个数字;
让运算符active=false;
// ... 用于数字按钮
函数clickNumber(){
数字。forEach((数字)=>{
number.addEventListener('单击',()=>{
如果(!运算符活动){
display.textContent+=number.textContent;
currentNumber=display.textContent;
}否则{
display.textContent+=number.textContent;