【问题标题】:else return statement is shadowing else if return statementelse if return 语句隐藏 else if return 语句
【发布时间】:2017-02-05 11:49:34
【问题描述】:

我的第一个语句工作正常,但它掩盖了下面的 else if 语句并且只是重复,可能是因为参数相同?我似乎无法弄清楚为什么,因为我使用了分号并正确地将条件括起来。我很想解释任何人提出的解决方案!

function sayHiToGrandma(string) {
    if (string.toLowerCase() === 'hello') {
        return "I can't hear you!";
    }
    else if (string.toUpperCase() === 'HELLO') {
        return "YES INDEED!";
    }
}

【问题讨论】:

  • 'Hello'.toLowerCase()'hello''Hello'.toUpperCase()'HELLO'。两者将同时为真或假。
  • 如果字符串是 'hello' 的任何大写/小写组合,则永远不会达到第二个条件
  • 它“遮蔽”了 else if 语句是什么意思?你的意思是对 sayHiToGrandma 函数的一次调用会产生两个返回语句吗?如果是这样,那是不可能的。一旦你从一个函数中return,根据定义,函数停止执行并且调用堆栈继续前进。所以你永远不会看到 else if 体执行,函数总是在第一个 if 体中返回,因为它们的真值条件是相同的。
  • 实验室的设置方式非常混乱。我认为我真的不想再做实验室了,我或多或少只是专注于完成它,因为我不想让它未完成。 idk 如果你们熟悉 learn.co 页面,但对于这所学校来说,它是熨斗学校。我只是想看看他们运行什么类型的程序。 @JF 我有一种感觉。
  • 和 @jcd,我的选词很糟糕。我应该说它永远不会到达函数的那部分,我明白为什么

标签: javascript function if-statement return


【解决方案1】:

在这种情况下,如果您的字符串是 hello 就像任何组合 HELLO 或任何带有小 h、e、l、l、o 和 H、E、L、L、O 的组合在您的 if 语句中,您将得到小写的 hello 所以它在 if 中满足,因此它将执行 if 并忽略所有剩余条件 这就是为什么只有我听不到你会被退回,但它不会进入 else if 条件

试试这个:http://www.w3schools.com/jsref/jsref_if.asp if 和 else if 条件相同,只有 if 会执行,否则 else if 不会执行

【讨论】:

    【解决方案2】:

    NVM 我发现了。我没有实际使用“字符串”,而是使用了这样的字符串参数,

    function sayHiToGrandma(string) {
      if (string === string.toLowerCase()) {
        return "I can't hear you!";
    }
    else if (string === string.toUpperCase()) {
        return "YES INDEED!";
    } else if ('I love you, Grandma.') {
      return 'I love you, too.'
    }
    

    etc.etc.etc.etc 感谢cmets伙计们

    【讨论】:

    • else if ('I love you, Grandma') 总是成功。你的意思是写else if (string == 'I love you, Grandma.')