【问题标题】:Else condition is not working其他条件不起作用
【发布时间】:2018-01-15 12:29:24
【问题描述】:

我正在学习 JS。所以我正在尝试创建一个函数,但“else”部分不起作用。你能帮我理解为什么吗?

function accesSite() {
    let ageLimite = prompt("How old are you ?");
    if (ageLimite >= 16) {
        var yes = " Ok, you can drive ! ";
    } else {
        var no = "No, you can't drive!";
    }
    let message = "Can you drive ?" + yes || no;
    return message
}

alert(accesSite());

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以执行以下操作。声明一个变量,然后相应地改变它:

     function accesSite(){
         let ageLimite = prompt("How old are you ?") >= 16;
         //create variable
         var canDrive = "";
         if (ageLimite >= 16){
             //change it accordingly
             canDrive = " Ok, you can drive ! " ;
         } else {
             //change it accordingly
             canDrive = "No, you can't drive!" ;
         }
         let message =  "Can you drive ? " +  canDrive ;
         return message
    }
    
    alert(accesSite());

    一个更好的版本:

    function accesSite(){
        return "Can you drive ? " + ( prompt("How old are you ?") >= 16 ? " Ok, you can drive ! " : "No, you can't drive!");
    }
    
    alert(accesSite());

    【讨论】:

    • 这种工作方法比@Nina Scholz 的回答更有意义:为 1 个目的创建 1 个变量。
    • 虽然这是更好的选择,但这与范围无关。
    • 这好多了,谢谢你的重构 :-) 很酷 :-)
    【解决方案2】:

    在我们修复它的同时,我们可以让代码更加简洁:

    function accesSite(){
        let ageLimite = prompt("How old are you ?");
        let message =  "Can you drive ? ";
    
        if (ageLimite >= 16)
            return message + " Ok, you can drive !";
    
        return message + "No, you can't drive!" ;
    }
    
    alert(accesSite());

    请注意,我在这里删除了 else 块:

    • 如果条件是true,那么您点击了return statement。低于return 的任何内容都无法执行。
    • 反之,如果条件为false,第一个block不会被执行,ifreturn不会被调用,所以if下面的代码会被执行。

    或者使用ternary condition:

    function accesSite(){
        let ageLimite = prompt("How old are you ?");
        return "Can you drive ? " + (ageLimite >= 16 ? " Ok, you can drive!" : "No, you can't drive!");
    }
    
    alert(accesSite());

    我个人更喜欢将prompt 结果保留在变量中。 Imo,这更具可读性。

    【讨论】:

    • 哇!但我不明白如何在您的示例中使用“no”行而不使用“else”。
    • @Gabriel:如果条件是true,那么你点击了return 语句。低于此的任何内容都无法执行。反之,如果条件为false,则第一个block不会被执行,return不会被调用,所以if下面的代码会被执行。
    • @Nick:如果用户关闭提示,返回值将是“falsy”,无论如何。
    【解决方案3】:

    您可以为 logical OR || 使用括号,因为加号具有更高的 operator precedence 作为逻辑 OR。

    let message =  "Can you drive? " + (yes || no);
    //                                 ^^^^^^^^^^^ evaluate first
    

    更好的方法是在顶部声明所有常量和变量并直接返回结果,而不用另一个变量作为返回字符串。

    该函数具有提前退出范式,这意味着如果您需要从一个函数返回,您可以以不需要else部分的方式组织条件,因为您使用return 在早期终止函数。

    来源:

    function accesSite(){
        const canYouDrive = "Can you drive? ";
        var ageLimite = prompt("How old are you?");
    
        if (ageLimite >= 16){
            return canYouDrive + "Ok, you can drive!";
        } 
        return canYouDrive + "No, you can't drive!" ;
    }
    
    alert(accesSite());

    【讨论】:

    • 这个答案解决了问题,但不是坏习惯。变量的范围是这里的问题:OP 为 1 个目的创建 2 个变量(将其附加到最终消息)。
    • @NinaScholz 当您后来将此添加到您的答案中时,我一定还在输入我的评论,但您是对的。 :)
    • " 除此之外,我建议只使用一个变量作为结果字符串,并在函数顶部声明所有变量。 "。好吧,当你写下你的答案时这样做...
    • 我不知道为什么这个 "bandage" 会获得这么多票。它没有解决问题中的任何明显问题。它只是不惜一切代价让 OP 的代码正常工作......我希望能够作为 示例的高代表用户提供更多服务。
    • 我的评论并不粗鲁。最多是直截了当的。我添加答案的唯一原因是,这里还没有正确的答案。只有绷带。
    【解决方案4】:
    function accesSite() {
        let ageLimite = prompt("How old are you ?");
        var msg = "Can you drive ? ";
        if (ageLimite >= 16) {
            msg = msg  + " Ok, you can drive ! ";
        } else {
            msg = msg  + "No, you can't drive!";
        }
        let message = msg;
        return message
    }
    
    alert(accesSite());
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2019-12-03
      相关资源
      最近更新 更多