Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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_Function_If Statement - Fatal编程技术网

Javascript 基于传入参数的计算器函数

Javascript 基于传入参数的计算器函数,javascript,function,if-statement,Javascript,Function,If Statement,我正在做一个简单的计算器作为家庭作业。该函数以两个数字(number1、number2)和一个运算符(+、-、*、/)作为参数 但是,有几种情况: 如果操作员缺少-->返回“提供的数据错误” 如果没有,则正常计算 如果缺少数字2-->假定+&-计算的数字为“0”,而*&/计算的数字为“1” 编辑:场景3应该只考虑传入的2个参数(1个数字和1个运算符)。我知道这不是调用函数的正确方法,但它是我试图解决的任务的一部分。 这就是我试过的 function calc (number1, number2,

我正在做一个简单的计算器作为家庭作业。该函数以两个数字(number1、number2)和一个运算符(+、-、*、/)作为参数

但是,有几种情况:

  • 如果操作员缺少-->返回“提供的数据错误”
  • 如果没有,则正常计算
  • 如果缺少数字2-->假定+&-计算的数字为“0”,而*&/计算的数字为“1”
  • 编辑:场景3应该只考虑传入的2个参数(1个数字和1个运算符)。我知道这不是调用函数的正确方法,但它是我试图解决的任务的一部分。

    这就是我试过的

    function calc (number1, number2, operator) {
        if (operator == undefined) {
            return "wrong data provided"
        } else {
            if (operator == "+") {
                return number1+number2
            } else if (operator == "-") {
                return number1-number2
            } else if (operator == "*") {
                return number1*number2
            } else if (operator == "/") {
                return number1/number2
            }
        } 
    
        if (number2 == undefined) {
            if (operator == "+") {
                    number2=0;
                return number1+number2
            } else if (operator == "-") {
                    number2=0;
                return number1-number2
            } else if (operator == "*") {
                number2=1;
                return number1*number2
            } else if (operator == "/") {
                number2=1;
                return number1/number2
            }
        }  else {
            if (operator == "+") {
                return number1+number2
            } else if (operator == "-") {
                return number1-number2
            } else if (operator == "*") {
                return number1*number2
            } else if (operator == "/") {
                return number1/number2
            }
        } 
    }
    
    计算(50,“+”)导致“提供的数据错误。为什么

    calc(50,"+")
    
    这里只传递2个参数,所以第3个参数未定义

    calc(50,,"+")
    

    改为传递3个参数

    您可以定义以下变量

    • 数字1将来自params
    • 除非有运算符而不是数字,否则数字2将作为参数。如果有运算符,它将是0或1,具体取决于运算符
    • 操作员将从参数或数字2中获取其值
    const运算符=[“+”、“-”、“*”、“/”];
    功能计算(编号1、n2、op){
    //我补充的部分
    让我们看一看2号;
    设算子=op;
    if(操作员。包括(n2)){
    如果(n2==“+”| n2==“-”){
    数字2=0;
    }否则{
    数字2=1;
    }
    运算符=n2;
    }否则{
    数字2=n2;
    }
    if(运算符==未定义){
    返回“提供的数据错误”
    }否则{
    如果(运算符=“+”){
    返回编号1+编号2
    }else if(运算符=“-”){
    返回编号1-编号2
    }else if(运算符=“*”){
    返回编号1*2
    }else if(运算符==“/”){
    返回编号1/编号2
    }
    }
    if(number2==未定义){
    如果(运算符=“+”){
    数字2=0;
    返回编号1+编号2
    }else if(运算符=“-”){
    数字2=0;
    返回编号1-编号2
    }else if(运算符=“*”){
    数字2=1;
    返回编号1*2
    }else if(运算符==“/”){
    数字2=1;
    返回编号1/编号2
    }
    }否则{
    如果(运算符=“+”){
    返回编号1+编号2
    }else if(运算符=“-”){
    返回编号1-编号2
    }else if(运算符=“*”){
    返回编号1*2
    }else if(运算符==“/”){
    返回编号1/编号2
    }
    }
    }
    
    console.log(calc(50,“+”);
    您将错误的数据传递给函数。 在javascript中,需要传递所有参数

    calc(50, "+")
    
    您将得到一个未定义的第三个参数,并且始终是“提供的数据错误” 试试这个

    calc(50, 0, "+")
    

    更好的代码:

    function calculate(number1,number2,operator){
    if (!number1 || !number2){
        return "Invalid number"
    }
    if (!['*','-','/','+'].includes(operator)){
        return "Invalid operator"
    }
    switch(operator){
      case "+":
        return number1 + number2;
      case "/":
        return number1 * number2;
      case "*":
        return number1 * number2;
      case "-":
        return number1 - number2;
     }
    }
    console.log(calculate(5,6,"+"))
    

    如前所述,您必须使用正确的参数进行调用。
    calc(50,0,“+”)
    。但是,您可以使用许多库中常见的hack

    函数计算(编号1、编号2、运算符){
    运算符=运算符| |编号2;
    number2=(number2==运算符)?未定义:number2;
    //其余的保持不变
    if(运算符==未定义){
    返回“提供的数据错误”
    }
    
    第一步-
    operator=operator | | number2;
    -是将
    operator
    设置为
    operator
    ,但如果它是falsy(假、未定义、0等),它将分配number2

    第二步-
    number2=(number2==运算符)?未定义:number2;
    是将number2设置为未定义,如果number2和运算符严格相等。 如果它们不相同,则指定原始值aka number2

    现在您可以调用
    calc(50,“+”)
    ,它将执行与
    calc(50,0,“+”)

    编辑:请注意,这现在不起作用,因为first
    if
    将为false,因此它将立即尝试进行计算…因此您必须至少以这种方式更改它:

    if(运算符==未定义){
    返回“提供的数据错误”
    }否则如果(数字2!=未定义){
    ...
    
    您可以执行以下操作:

    函数计算(par1、par2、par3){
    var number1=par1;
    var算子;
    var数2;
    如果(par2的类型=='string'){
    运算符=par2;
    }否则{
    数字2=par2;
    运算符=par3;
    }
    if(运算符类型==“未定义”){
    返回“提供的数据错误”
    }否则{
    如果(运算符=“+”){
    返回数字1+(数字2 | | 0);
    }else if(运算符=“-”){
    返回编号1-(编号2 | | 0);
    }else if(运算符=“*”){
    返回number1*(number2的类型=='undefined'?1:0);
    }else if(运算符==“/”){
    返回number1/(typeof number2=='undefined'?1:0);
    }
    }
    }
    控制台日志(计算(50'+);
    控制台日志(计算(50,*);
    日志(计算(50,20'+');
    日志(计算(50,未定义“*”);
    
    console.log(calc(50,10));
    参数按顺序排列,意思是
    calc(50,“+”
    具有
    number1
    as
    50
    number2
    as
    ”+"
    运算符
    作为
    未定义的
    参数。您的
    number2
    参数在哪里?对不起,我忘了提一下,它应该只说明传递的1个数字和1个参数。除了调用函数的方式之外,您还有错误的检查顺序,如果
    运算符
    不是
    未定义的
    ,您将永远不会看到er检查
    number2
    是否
    未定义
    。如果
    运算符
    未定义
    或任何
    +
    -
    *
    /
    字符,则函数将始终从第一个
    if…else
    语句返回。正如一般想法一样,如果您假定0表示+和-和1对于*和/如果数字2缺失,这只是说“如果数字2缺失,返回数字1”的一种复杂方式。节省了大量代码和检查。OP提到
    number2
    可以
    未定义