【问题标题】:calculator: variable somehow undefined in "if else" statement计算器:变量在“if else”语句中以某种方式未定义
【发布时间】:2021-05-25 00:48:46
【问题描述】:

我正在尝试使用 Javascript 制作计算器。 我有一个要求输入运算符的功能。 如果用户输入除 *、/、+ 或 - 以外的任何内容,我希望它再次询问操作员。 如果用户输入了一个接受的运算符,一切正常,但是,如果输入了错误的运算符,并且第二次执行该函数,则该运算符的值在某种程度上是“未定义的”。而且我不知道为什么......当我在 if 语句中调用函数时,它不会跳回到 getOperator() 的开头,在那里我为 operator 变量赋值吗? 谁能告诉我我做错了什么?

function getOperator() {
    var operator = getStringInputWithPrompt('Please enter the operator:');
    if ((operator !== "+") && (operator !== "*") && (operator !== "-") && (operator !== "/")) {
        console.log("\nSorry that was not a valid operator");
        getOperator();
    } else {
    return operator;  
    }
} 

【问题讨论】:

  • 如果输入例如是一个字母,那么它不会同时等于 *、+、_ 或 /,对吗?如果我错了,请纠正我!它与我编写的代码一起工作(我的意思是它的 if 条件部分有效),但如果有更好/更短的方法来编写它,我很想知道!
  • !['+', '*', '-', '/'].includes(operator),或!{ '+': true, '*': true, '-': true, '/': true }[operator]
  • 啊太棒了!我以为会有一种更短的方法来写这个我不知道的!谢谢:)

标签: javascript if-statement undefined calculator


【解决方案1】:

if 中,您对getOperator() 进行了递归调用,但您没有对其返回值做任何事情。您可以立即退货。

console.log("\nSorry that was not a valid operator");
return getOperator();

【讨论】:

    【解决方案2】:

    需要返回递归调用的结果。

    function getOperator() {
        var operator = prompt('Please enter the operator:');
        if (operator !== "+" && operator !== "*" && operator !== "-" && operator !== "/") {
            console.log("\nSorry that was not a valid operator");
            return getOperator();
        } else {
            return operator;
        }
    }
    
    console.log(getOperator());

    因为写了一个计算器,你可以使用一个对象作为运算符,并检查运算符是否存在,并为这个运算符取函数。

    const
        operators = {
            '+': (a, b) => a + b,
            '-': (a, b) => a - b,
            '*': (a, b) => a * b,
            '/': (a, b) => a / b
        };
    
    function getOperator() {
        let operator = prompt('Please enter the operator:');
        if (operator in operators) return operator;
        return getOperator();                                // omit else after return
    }
    
    console.log(getOperator());

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2020-08-31
      • 2021-11-04
      • 2018-11-04
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多