分支语句

205 阅读4分钟

分支语句

JS 在执行的时候, 是按照 从上往下的顺序执行的
所以我们书写的所有代码都会执行, 区别就是执行顺序的问题
但是上述的执行方案会有一个小问题, 比如我想根据某一个条件决定是否执行一段代码

一个代码案例:
在访问一个页面的时候, 如果页面地址输入的没问题, 并且网络也能够正常访问页面
那么此时一定可以正常访问页面
如果上述的条件有一个不满, 比如说地址输入错误, 或者说网线被扒了 那么此时页面就无法正常的访问了

此时如果是前端JS处理, 那么应该是这解决的:
如果条件1和条件2都成立, 那么展示一个正常的页面
否则, 展示一个错误的页面 (404页面)
所以分支语句的一个核心就是给了我们 基于某一个条件决定执行某一段代码的能力

if 语句

  • 语法1:
    if (条件) {
    书写如果条件成立, 需要执行的代码
    }

    • 条件为真 就会执行 大括号内的 代码, 否则 不执行
    • 条件可以直接书写布尔值, 也可以书写一个表达式, 或者一个数字
    • 只要你书写的不是一个布尔值, 那么会隐式转换为 一个布尔值
  • 语法2:
    if (条件) {
    书写如果条件成立, 需要执行的代码
    } else {
    当上边的条件不成立的时候, 我会执行, 如果上边的条件成立了, 我就不执行了
    }

  • 语法3(不推荐大量使用):

    if (条件1) {
    如果条件1成立, 那么我会执行, 同时后续的所有 else if 或者 else 都不会执行了
    } else if (条件2) {
    如果条件1不成立, 但是条件2成立了, 那么我会执行 , 同时后续的所有 else if 或者 else 都不会执行了
    } else if (条件3) {
    如果条件1和条件2都不成立, 但是条件3成立了, 那么我会执行 , 同时后续的所有 else if 或者 else 都不会执行了
    } .....

  • 语法4(语法3的一个升级补充):
    if (条件1) {
    如果条件1成立, 那么我会执行, 同时后续的所有 else if 或者 else 都不会执行了
    } else if (条件2) {
    如果条件1不成立, 但是条件2成立了, 那么我会执行 , 同时后续的所有 else if 或者 else 都不会执行了
    } else if (条件3) {
    如果条件1和条件2都不成立, 但是条件3成立了, 那么我会执行 , 同时后续的所有 else if 或者 else 都不会执行了
    } else {
    如果上述的所有条件都不成立, 那么我会执行, 否则就不执行
    }

    • 注意: if 语句的难点不是如何选择 语法 1 2 3 4
    • 难点是 if 语句 的 条件如何书写
三元表达式 (三元运算符/三目运算符/问号冒号表达式)

也是分支语句的一种, 对 if 语句的一个优化

  • 语法: 条件 ? 条件为真的时候执行的代码(只有一行) : 条件为假的时候执行的代码
        /**
         *  假设一个变量 box 他的值可能是 1 也可能是 2
         * 
         *  我们要根据 这个变量的值 去创建一个新的变量, 内部的值存储为 成功或者失败
         * 
         *  我们自己约定 如果值 === 1 那么为成功, 其他情况 为失败
        */

        // if 语句完成上述需求
        var box = 2
        var msg;
        if (box === 1) {
            msg = '成功'
        } else {
            msg = '失败'
        }
        console.log(msg)

        // 利用 三元表达式优化上述的 if 语句
        var box = 1

        // var msg = 条件 ? 条件为真的时候执行的代码(只有一行) : 条件为假的时候执行的代码
        var msg = box === 1 ? '成功' : '失败'

        console.log(msg)

switch 语句

主要用于某一个变量的具体值, 做判断 (全等 ===)

        // switch (变量) {
        //     case 100:
        //         当变量的值 === 100 的时候会执行
        //         break;
        //     case 101:
        //         当变量的值 === 101 的时候会执行
        //         break;
        //     default:
        //         当上述条件都不满足的时候, 执行
        // }
        
        var day = 4     // 取值范围是 1~7 表明 周几

        switch (day) {
            case 1:
                console.log('周一')
                break
            case 2:
                console.log('周二')
                break
            case 3:
                console.log('周三')
                break
            case 4:
                console.log('周四')
                break
            case 5:
                console.log('周五')
                break
            case 6:
                console.log('周六')
                break
            case 7:
                console.log('周日')
                break
        }
switch 的穿透现象 (穿刺现象)
  1. 在书写 case 的时候, 没有书写 break
  2. 那么如果这个 case 符合条件那么就会执行它内部的代码
  3. 代码执行完毕后, 没有发现 break, 所以会继续向下执行
  4. 不管 下一个 case 条件是否满足
  5. 直到遇见下一个 break 或者 当前 switch 代码全都执行完毕
var day = 4     // 取值范围是 1~7 表明 周几

        switch (day) {
            case 1:
                console.log('周一')
                break
            case 2:
                console.log('周二')
                break
            case 3:
                console.log('周三')
                break
            case 4:
                console.log('周四')  //输入4时,同时输出'周四','周五'
            case 5:
                console.log('周五')
                break
            case 6:
                console.log('周六')
            case 7:
                console.log('周日')
            default:
                console.log('上述条件都不满足的时候, 执行')
        }