分支结构、数据类型转换

133 阅读4分钟

分支结构

1.程序的流程控制语句:3种

  • 顺序结构 - 默认:从上向下依次执行每一句话
  • 分支结构 - 通过条件判断,选择部分代码执行
  • 循环结构 - 通过条件判断,选择要不要重复执行某块代码

2.分支结构:3种

if...else...:3种情况

  • 一个条件,一件事,满足就做,不满足就不做

    if(条件){
            操作;
    }
    
  • 一个条件,两件事,满足就做第一件,不满足就做第二件

    if(条件){
            操作;
    }else{
            默认操作;
    }
    
  • 多个条件,多件事,满足谁,就做谁

    if(条件1){
            操作1;
    }else if(条件2){
            操作2;
    }else{
            默认操作;
    }
    
  • 注意:

    • 1、else...if这句话想写多少,由程序员自己决定
    • 2、else这句话可以省略不写,但是不推荐,如果不写,条件都不满足的情况,则什么事儿都不会发生
    • 3、分支走了一条路,就不会再走别的路

switch...case 分支

  • 语法:
    switch(变量/表达式){
            case1:
            操作1;
            break;
            case2:
            操作2;
            break;
            default:
            默认操作;
    }
    
  • 特殊:
    • 问题:默认只要一个case满足后,会将后续所有的操作全部做完
    • 解决:break;
    • 建议:
      • 每一个case的操作后面都跟上一个break
      • 有的地方也可以不加break:
        • 1、最后一个操作default可以省略break
        • 2、如果中间多个条件,做的操作是一样的,可以省略掉中间部分
    • case在做比较的时候是不带有隐式转换的
      • default可以省略不写的,但是不推荐,如果不写,条件都不满足的情况,则什么事儿都不会发生
    • if vs switch的区别?
      1、switch...case:优点:执行效率较高,速度快(他比较时,case做的不是范围查找,而是等值比较)
                        缺点:必须要知道最后的结果是什么才可以使用
      2、if...else...: 优点:可以做范围判断
                        缺点:执行效率较慢,速度慢(他做的是范围查找)
       建议:代码开发完过后,要做代码优化,要尽量的少用if...else...,多用switch...case和三目运算
      

三目运算:简化分支的

  • 语法1:条件?操作1:默认操作;===if...else...
  • 语法2:条件1?操作1:条件2?操作2:默认操作===if...else if..else
  • 注意:
    • 1、默认操作不能省略,省略了会报错
    • 2、如果操作复杂,不能使用三目运算:操作只能有一句话,如果操作有多句话还是推荐使用switch或if

数据类型转换

  • 之前了解到隐式转换:多半都是再运算符中悄悄的变化的,但是隐式转换总有力不从心的时候:"15px"*2=NaN
  • 页面上一切数据js获取到后都是字符串类型

强制(显示)数据类型转换:

转字符串:2种方法

  • 不重要:页面上一切数据js获取到后都是字符串类型
  • var str=x.toString();//x不能undefined和null,会报错,undefined和null不能使用.做任何操作,因为他们不是对象
  • var str=String(x);//万能的,任何人都可以转为字符串,但是绝对不要手动使用,完全等效于隐式转换,还不如+""

转数字:3种方法

  • parseInt(str/num); - parse解析 Int整型 - 专门用于将【字符串转为整数】
    • 执行原理:从左向右依次读取转换每个字符,碰到非数字字符就停止转换,如果一来就不认识则为NaN,不认识小数点。

       ```js
       console.log(parseInt(35.5));//35
       console.log(parseInt("35.5"));//35
       console.log(parseInt("3hello5"));//3
       console.log(parseInt("hello35"));//NaN
       console.log(parseInt("35px"));//35
       console.log(parseInt(".35px"));//NaN
       console.log(parseInt(true));//NaN
       console.log(parseInt(false));//NaN
       console.log(parseInt(undefined));//NaN
       console.log(parseInt(null));//NaN
       ```
      
  • parseFloat(str); - parse解析 Float浮点型 - 专门用于将【字符串转为小数】
    • 执行原理:几乎和parseInt一致,认识第一个小数点

          ```js
          console.log(parseFloat(35.5));//35.5
          console.log(parseFloat("35.5"));//35.5
          console.log(parseFloat("3hello5"));//3
          console.log(parseFloat("hello35"));//NaN
          console.log(parseFloat("35.5px"));//35.5
          console.log(parseFloat(".35px"));//0.35
          console.log(parseFloat("35.5.5"));//35.5
          ```
      
  • Number(x);//万能的,任何人都可以转为数字,但是绝对不要手动使用,完全等效于隐式转换,还不如 -0 *1 /1

转布尔:

  • Boolean(x);//万能的,任何人都可以转为布尔,但是绝对不要手动使用,完全等效于隐式转换,还不如 !!x

  • 只有6个为false:0,"",undefined,NaN,null,false,其余全部都是true。

    • 不为这六个就是true,为这六个就是false
  • 绝对不会手动使用,但是再分支或循环的条件之中,他都会悄悄的转为一个布尔值