Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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
在JavaScript计算器中链接多个操作_Javascript_Calculator - Fatal编程技术网

在JavaScript计算器中链接多个操作

在JavaScript计算器中链接多个操作,javascript,calculator,Javascript,Calculator,我用JavaScript创建了一个基本的计算器,它接受innerHTML的值并执行计算,它在某种程度上是有效的,只是它不链接多个操作,即1+2返回3,但1+2+1也返回3。请任何人帮忙,谢谢 我的HTML: 计算器 我的计算器 ^ √ 德尔 C 0 1. 2. / 3. 4. 5. * 6. 7. 8. - 9 . + = 和JavaScript: "use strict"; let display = document.getElementById("dis

我用JavaScript创建了一个基本的计算器,它接受innerHTML的值并执行计算,它在某种程度上是有效的,只是它不链接多个操作,即1+2返回3,但1+2+1也返回3。请任何人帮忙,谢谢

我的HTML:


计算器
我的计算器
^
√
德尔
C
0
1.
2.
/
3.
4.
5.
*
6.
7.
8.
-
9
.
+
=
和JavaScript:

"use strict";
let display = document.getElementById("display1");

function operatorButton() {
    var button = document.getElementById("squareroot");
    button.addEventListener("click", function () {
        display.innerHTML += "√";
    })
    var button = document.getElementById("power");
    button.addEventListener("click", function () {
        display.innerHTML += "^";
    })
    var button = document.getElementById("divide");
    button.addEventListener("click", function () {
        display.innerHTML += "/";
    })
    var button = document.getElementById("multiply");
    button.addEventListener("click", function () {
        display.innerHTML += "*";
    })
    var button = document.getElementById("subtract");
    button.addEventListener("click", function () {
        display.innerHTML += "-";
    })
    var button = document.getElementById("add");
    button.addEventListener("click", function () {
        display.innerHTML += "+";
    })
    var button = document.getElementById("dot");
    button.addEventListener("click", function () {
        display.innerHTML += ".";
    })
    var button = document.getElementById("clear");
    button.addEventListener("click", function () {
        display.innerHTML = "";
    })
    var button = document.getElementById("delete");
    button.addEventListener("click", function () {
        display.innerHTML = display.innerHTML.slice(0, display.innerHTML.length - 1);
    })
}
operatorButton();

function numButton() {
    let button = document.querySelectorAll('.btn-input');
    for (let i = 0; i < button.length; i++) {
        button[i].addEventListener("click", function () {
            display.innerHTML += i
        })
    }
}
numButton();

const addition = (operand1, operand2) => operand1 + operand2;
const subtraction = (operand1, operand2) => operand1 - operand2;
const multiplication = (operand1, operand2) => operand1 * operand2;
const division = (operand1, operand2) => operand1 / operand2;
const squareroot = (operand1) => Math.sqrt(operand1);
const power = (operand1, operand2) => Math.pow(operand1, operand2);

function operate(operand1, operator, operand2) {
    switch (operator) {
        case '^':
            return power(operand1, operand2);
        case '/':
            return division(operand1, operand2);
        case '*':
            return multiplication(operand1, operand2);
        case '+':
            return addition(operand1, operand2);
        case '-':
            return subtraction(operand1, operand2);
        default:
            break;
    }
}
operate();

function operate1(operator, operand1) {
    switch (operator) {
        case '√':
            return squareroot(operand1);
        default:
            break;
    }
}
operate1();

function calculator() {
    var button = document.getElementById("equals");
    button.addEventListener("click", function () {
        let calculation = display.innerHTML.split('');
        let operation, answer, operand1, operand2;
        for (let i = 0; i < calculation.length; i++) {
            if (calculation[i] === "^" || calculation[i] === "/" || calculation[i] === '*' || calculation[i] === "+" || calculation[i] === "-") {
                let operationPos = calculation.indexOf(calculation[i]);
                operation = calculation[i];
                operand1 = parseFloat(calculation.slice(0, operationPos).join(''));
                operand2 = parseFloat(calculation.slice(operationPos + 1).join(''));
                answer = operate(operand1, operation, operand2);
                display.innerHTML = (answer);
            } else if (calculation[i] === "√") {
                let operationPos = calculation.indexOf(calculation[i]);
                operation = calculation[i];
                operand1 = parseFloat(calculation.slice(operationPos + 1).join(''));
                answer = operate1(operation, operand1);
                display.innerHTML = (answer);
            }
        }
    })
}
calculator();
“严格使用”;
let display=document.getElementById(“display1”);
函数运算符按钮(){
var按钮=document.getElementById(“平方根”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=”√";
})
var按钮=document.getElementById(“power”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=“^”;
})
var按钮=document.getElementById(“divide”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=“/”;
})
var按钮=document.getElementById(“乘法”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=“*”;
})
var按钮=document.getElementById(“减法”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=“-”;
})
var按钮=document.getElementById(“添加”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML++=“+”;
})
var按钮=document.getElementById(“点”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML+=”;
})
var按钮=document.getElementById(“清除”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML=“”;
})
var按钮=document.getElementById(“删除”);
按钮。addEventListener(“单击”),函数(){
display.innerHTML=display.innerHTML.slice(0,display.innerHTML.length-1);
})
}
运算符按钮();
函数numButton(){
let button=document.queryselectoral('.btn input');
for(设i=0;i操作数1+操作数2;
常量减法=(操作数1,操作数2)=>操作数1-操作数2;
常量乘法=(操作数1,操作数2)=>操作数1*操作数2;
常量除法=(操作数1,操作数2)=>操作数1/操作数2;
常量平方根=(操作数1)=>Math.sqrt(操作数1);
常量幂=(操作数1,操作数2)=>Math.pow(操作数1,操作数2);
函数操作(操作数1、运算符、操作数2){
开关(操作员){
案例‘^’:
返回幂(操作数1、操作数2);
案例“/”:
返回除法(操作数1、操作数2);
案例“*”:
返回乘法(操作数1、操作数2);
格“+”:
返回加法(操作数1、操作数2);
案例'-':
返回减法(操作数1、操作数2);
违约:
打破
}
}
操作();
函数运算符1(运算符,操作数1){
开关(操作员){
案例√':
返回平方根(操作数1);
违约:
打破
}
}
操作1();
函数计算器(){
var按钮=document.getElementById(“等于”);
按钮。addEventListener(“单击”),函数(){
let calculation=display.innerHTML.split(“”);
let运算,应答,操作数1,操作数2;
for(设i=0;i
当超过2个值时,我建议将数字放入数组中,并使用reduce()将其累加。
我的意思是和、乘、除等 因为只有两个操作数,所以必须累计值
一般为1+2+1
1*2*1
1/2/1
我的意思是,必须有累加器才能对下一个值进行操作
或者使用具有中间结果的闭包
但是使用reduce()我看到了它的缺点,因为它一次只使用一个运算符,例如,只对值求和
我假设您想要组合运算符,如1+2*1

因此,当超过2个值时,使用闭包应该是可以的,我建议将数字放入数组中,并使用reduce()将其累加。
我的意思是和、乘、除等 因为只有两个操作数,所以必须累计值
一般为1+2+1
1*2*1
1/2/1
我的意思是,必须有累加器才能对下一个值进行操作
或者使用具有中间结果的闭包
但是使用reduce()我看到了它的缺点,因为它一次只使用一个运算符,例如,只对值求和
我假设您想要组合运算符,如1+2*1

因此,在函数
calculator()
中使用闭包应该是可以的
let calculation = display.innerHTML.split('');
var str = "124-2+3*10";
var calculation = str.match(/\d+|[^0-9]/g);
var calculation = str.match(/\d+\.\d+|\d+|[^0-9]/g);