js数据类型转换+隐式转换+流程控制-分支结构(单分支语句+多分支语句)+三元表达式+switch-case分支结构+while循环+for循环

196 阅读6分钟

数据类型转换

让两个数据类型不一样的数据转换成一样的数据类型

其他类型转number(数字型)

转整型

代码:parseInt(数据)

    let i =3.14
    console.log(parseInt(i));//结果为3

转小数型

代码:parseFloat(数据)

    let i =3.14
    console.log(parseFloat(i));//结果为3.14

非字符串类型转Number

    let i =3.14
    console.log(Number(i));//结果为3.14

number类型的特殊数值 NaN

NaN : number类型中一个特殊值

场景: NaN表示错误的运算。 产生的原因一般是代码出bug

NaN特点: 不能参与任何运算。 结果一律是NaN

转string(字符串)

    //1. String(数据)
     let i = 200
     console.log(String(i));
     
     //2. 变量名.toString()
     /* a. 如果是undefined与null,这种方式会报错 
        b. 这种方式可以支持进制转换。 例如把 十进制转十六进制
     */
       console.log(i.toString());
       // 转16进制
       console.log(i.toString(16));
       // 转8进制
       console.log(i.toString(8));

转Boolean(布尔)

    // Boolean(数据)
        /* 
        1.false: 有7种数据会得到false 
           0  -0 null '' unedfined false NaN
        2.true:  除false 7种之外的一切数据
        */
        console.log(Boolean(123));//true
        console.log(Boolean(0));//false

隐式转换

     /* 
       隐式转换 : 当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算
            (1)转换数字 : 算术运算符 + - * / %
            (2)转换字符串 : 连接符+  (+号两边只要有一边是字符串,此时+就是连接符)
            (3)转换布尔: 逻辑非 !    
       */
        console.log('10' - 10);// 0
        console.log('10' - '9');// 1
        console.log('10' / 5);// 2

        console.log(!1);//false
        console.log(!0);//true

undefined与null区别

    /* 
        1. undefined : 未定义。 当变量只声明,但是没有赋值。此时默认值是undefined
            举例 : undefined相当于期房。 买了房,但是房子还没建出来。(未定义)

        2. null : 有定义。 定义的值是空值。
            举例  : null相当于毛坯房。买了房,但是房子没住人,里面是空的。(空值)
        */

        let a
        console.log(a); //unedfined
        let b = null
        console.log(b); //null

        console.log(Boolean(a)); //false
        console.log(Boolean(b)); //false
        console.log(a == b); //true  值相同

        console.log(a === b); //false  值相同但是数据类型不相同

        console.log(Number(a)); //NaN
        console.log(Number(b)); //0
        console.log(a + b); //NaN

流程控制-分支结构

程序三大流程控制语句

以前我们写的代码,写几句就从上往下执行几句,这种叫顺序结构

有的时候要根据条件选择执行代码,这种就叫分支结构

某段代码被重复执行,就叫循环结构

image.png

语句与表达式

1.表达式 : 由运算符组成的式子, 一定会有运算结果 (运算)

2.语句 : 让js编译器执行某个命令,做什么事情 (执行)

分支语句 循环语句

if分支语句

    1.顺序结构(默认) : 代码从上往下依次执行
    2.分支结构 : 代码根据条件来执行
      语法
          if(条件 true/false){
              满足条件需要执行的代码
          }
注意点:  小括号里面的条件可以写哪些代码呢?
          (1)比较表达式 : 比较表达式结果一定是布尔类型
          (2)直接写布尔类型的值
          (3)写其他的值 : 编译器会自动转成布尔类型来判断是否成立
    if(5>2){
        alert('今天在包子里吃到一只虫子')
    }

if-else 多分支语句

       if-else双分支
       语法:
        if(条件true/false){
            条件成立时需要执行的代码
        }else{
            条件不成立时需要执行的代码
        }

        注意点:双分支语句是两个互斥条件(两个条件一定会满足一个,不会同时满足,也不会同时不满足)
            if大括号代码 和 else大括号代码 一定会执行一个,不会同时执行,也不会同时不执行
    if(5>2){
        alert('今天在包子里吃到一只虫子')
    }else{
        alert('我骗你的')
    }

if-else if-else...分支语句

        if分支语句
            单个条件: if单分支
            两个条件: if-else双分支
            多个条件: if - else if - else 多分支

        语法
            if(条件1){
                条件1成立时需要执行的代码
            }else if(条件2){
                条件2成立时需要执行的代码
            }else if(条件3){
                条件2成立时需要执行的代码
            }
            .....
            else{
                如果前面所有条件都不满足,则执行else代码
            }
        注意点
            (1)多分支所有的大括号代码最多只会执行一个,只有当前面的条件不满足,才会进入后面的条件判断
            (2)多分支一定要以if开头,后面else if可以多个,结尾else可以省略
    // 隐式转换
    let i = +prompt('请输入考试分数')
    console.log('我今天上学了')
    console.log('我今天考试了')
    console.log('我回家了')
    if (i >= 90) {
      console.log('买布加迪')
    } else if (i >= 80) {
      console.log('奖励兰博基尼')
    } else if (i >= 60) {
      console.log('奖励兰特斯拉')
    } else {
      console.log('打我一顿')
    }
    console.log('我回房间睡觉了')

三元表达式

        1.运算符根据运算数的多少,分为一元、二元、三元运算符
            一元运算符:只能运算一个数    
                ++ -- !
            二元运算符:能运算两个数
                算术、比较
            三元运算符: 能运算三个数
                ?:
        2.三元表达式: 表达式 ? 代码1 : 代码2
            执行规则: 如果表达式为true,则执行代码1,否则执行代码2
        3.三元表达式功能和if-else语句类似
            3.1 如果你的代码只有1行,则可以用三元
            3.2 三元表达式有运算结果

switch-case分支结构

        switch-case分支结构
        语法:
            switch(匹配值){
                case 值1 :
                    值1 === 匹配值,需要执行的代码
                    break
                case 值2 :
                    值2 === 匹配值,需要执行的代码
                    break
                ......
                default :
                    匹配值与上面所有case的值不匹配(全等),需要执行的代码
                    break
            }
        注意点
            (1)匹配值和case值 一定要是 ‘全等’关系
            (2)不能省略break关键字,break关键字作用是结束switch语句
                如果省略则会发生传统现象: 代码从上一个case无条件执行到下一个case

switch-case穿透

    如果在case 值:下没有加break那么此时就会发生穿透
    程序会一直往下运行其他的case 值:直到结束

穿透有何用

       /* 
      春 : 3 4 5
      夏 : 6 7 8
      秋 : 9 10 11
      冬 : 12 1 2
      */
    let season = +prompt('请输入月份')
    switch (season) {

      case 3:
      case 4:
      case 5:
        alert('春季')
        break
      case 6:
      case 7:
      case 8:
        alert('夏季')
        break
      case 9:
      case 10:
      case 11:
        alert('秋季')
        break
      case 12:
      case 1:
      case 2:
        alert('冬季')
        break
      default:
        alert('请输入正确的月份')
    }

while循环

    循环结构:代码重复执行
      while循环语法 
          while( 条件 true/false ){
              循环体:需要重复执行的代码
          } 
    // 打印10次 你好吗?
    let i = 0
    while (i < 10) {
      console.log('你好吗?');
      i++
    }

for循环(使用很多)

        for循环: 1.声明循环变量  2.循环条件  3.循环变量自增 写在一个小括号中,代码更加简洁易读
        语法:
            for(语句1;语句2;语句3){
                循环体:需要重复执行的代码
            }
    // 打印10次 你好吗 ?
    for (let i = 0; i < 10; i++) {
            console.log('你好吗?');
        }

break与continue

    continue : 结束当前循环进入下一次循环
       
    break:遇到break立即结束整个循环;
    break有就近远着,若循环嵌套着循环那么break只能结束最近的一个循环

循环与循环之间可以嵌套使用,也可以嵌套其他代码

玩循环需小心谨慎哦

    while (true) {
            let i = confirm('我爱你,嫁给我好吗?')
            if (i) {
                alert('我们结婚吧')
                break
            }
        }