逻辑分支

303 阅读4分钟

逻辑分支

一、if分支

if语句

if 语句的语法

    if(条件表达式){
        当条件表达式的结果为true的时候要执行的代码
    }

例:判断输入的数,是否为偶数

    var num = prompt("输入一个数")
    if (num % 2 == 0) {
      console.log("是偶数")
    }

if else语句

if else语句的语法

    if(条件表达式){
        当条件表示式的结果为true的时候要执行的代码
    }else{
        当条件表达式的结果为false的时候要执行的代码   
    }

例:判断输入的数,为偶数还是为奇数

    var num = prompt("输入一个数")
    if (num % 2 == 0) {
      console.log("是偶数")
    }
    else
      console.log("是奇数")

if else if else语句

if else if else语句的语法

   if(条件表达式1){
       当条件表达式1的结果为true的时候,要执行的代码
    }else if(条件表达式2){
        当条件表达式2的结果为true的时候,要执行的代码
    }else if(条件表达式3){
        当条件表达式3的结果为true的时候,要执行的代码
    }
。。。
    }else{
    }
# 多分支可以有若干个else ifelse根据需要可以有也可以没有

例:判断输入的数,输出分数的等级

    var score = prompt("输入一个数")
    if (score < 0) {
      console.log('数字不是分数');
    } else if (score < 60) {
      console.log('不及格');
    } else if (score < 80) {
      console.log('良');
    } else if (score <= 100) {
      console.log('优');
    }
    else {
      console.log('数字不是分数');
    }

分支结构的嵌套

例:定义三个变量,求出三个值中的最大值。

    var a,b,c;
    if(a>b){
        if(a>c){
           alert("变量a最大");
        }else{
            alert("变量c最大");
        }
    }else{
        if(b>c){
           alert("变量b最大");
        }else{
            alert("变量c最大");
        }
    }

if条件中的细节

if条件的结果是布尔值,所以可以将布尔值当做条件放入if的小括号中 例:

    if(true){
       alert("真的");
    }else{
        alert("假的");
    }

如果将别的非布尔值的表达式或数据放入条件小括号中,会发生隐形的类型转换

例:

    if(2){ // 这里的2被转换成了布尔型
        console.log(2);
    }

二、switch语句

switch多路判断

语法:

switch(变量){
    case1:
        执行的代码块
    break;
    case2:
        执行的代码块
    break;
    。。。
    default:
        执行代码块
}

使用说明: 0. break表示当前分支执行后就结束switch的运行,后续代码不再运行 0. default可以理解为判断语句中的else 0. case理解为if来判断这个变量是否全等于某个值

例:

var day = Number(prompt("请输入一个0~7之间数字:"));
if(isNaN(day) || day<=0 || day>7){
    alert("输入错误");
}else{
    switch(day){
        case 1:
            alert("今天星期一");
        break;
        case 2:
            alert("今天星期二");
        break;
        case 3:
            alert("今天星期三");
        break;
        case 4:
            alert("今天星期四");
        break;
        case 5:
            alert("今天星期五");
        break;
        default:
            alert("输入错误");
    }
}

注意:使用多路判断的时候,能使用switch进行判断,就尽量使用switch,因为switch的判断都是确定的值,条件比较简单,所以效率高。

使用场景:

  • 如果判断的条件比较复杂,使用if

  • 条件是确定的值,分两种情况:

    • 如果判断的分支小于等于3个,就使用if,这时候的效率和switch一样
    • 如果大于3个,就使用switch。
  • switch判断使用的是全等于(===)

switch 穿透写法

如果case后面不写break,那当前case执行后,会继续执行后面的case中的代码 输出1~5:

var day;
switch(day){
    case 1:
        alert("今天星期一");
    break;
    case 2:
        alert("今天星期二");
    break;
    case 3:
        alert("今天星期三");
    case 4:
        alert("今天星期四");
    break;
    case 5:
        alert("今天星期五");
    break;
    default:
        alert("输入错误");
}

当day的值为2的时候,不会执行后面的代码,当day的值为3的时候,执行完3的代码,还会执行4的代码,因为3的代码后面没有break。

这时候可以利用switch的这个特性,简写一些代码:

输入一个月份,判断并输出这个月有多少天?

var month = Number(prompt("请输入一个月份:"));
if(isNaN(month) || month<=0 || month>12){
    alert("输入错误");
}else{
    switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            alert("这个月有31天");
        break;
        case 4:
        case 6:
        case 9:
        case 11:
            alert("这个月有30天");
        break;
        case 2:
            alert("这个月有29天或28天");
        break;
        default:
            alert("输入错误");
    }
}

三、三元运算

if双分支有一种简写方式:

条件?条件成立时运行的代码段:条件不成立时运行的代码段;

例:

a>b?console.log(a):console.log(b);

这种表达双分支的方式叫做三元运算,也叫做三元表达式。

三元运算有个特点:可以将整个表达式当做一个值,可以赋值给一个变量,也可以输出

例:

var max = a>b?a:b; // 将ab中较大的数赋值给变量max
console.log(a>b?a:b); // 将ab中较大的数输出