day2 运算符和分支结构

一、一元运算符

// ++  --
        1.字符串类型  对于字符串来说 ++  -- 会自动进行类型转换
        var str='2334'
        str++//str=Number(str)+1
        console.log(str)//2335

        var str1='abc'
        str1++//无法转换成数值,也就是转换不成功的string类型 就会变为NaN
        console.log(str1)//NaN


        2.布尔类型
        var bol=true //true为1  false为0
        bol++//布尔类型转换成number
        console.log(bol)//2


        3.null类型
        var no=null//转成布尔是false然后转成number是0
        no--//null先转换成布尔类型然后再转换成number类型
        console.log(no)//-1


        4.undefined类型
        var und
        und--//undefined转换不成功 结果是NaN
        console.log(und)//NaN


        5.number类型
        var num=10
        console.log(num++)//10
        console.log(++num)//12
        console.log(num--)//12
        console.log(--num)//10
        console.log(num)//10

        复杂的自增自减
        var str1='123'
        布尔类型转换
        var bool=Boolean(str1)//true
        console.log(bool--)//1
        console.log(--str1)//122

        var str2=str1 +'ab'//123ab
        console.log(str2--)//NaN

        一元运算符只能和变量一起用,不能出现其他运算符
        var num1=10
        var bool1=num1
        console.log(num1++)//10
        console.log(num1--)//11
        console.log(bool1++)//10
        console.log(bool1)//11
        console.log(Boolean(bool1))//true

        var yes='null'
        console.log(yes++)//NaN
        console.log(Boolean(yes))//false

        var obj=null
        var bool2=Boolean(obj)//false
        console.log(obj--)//0
        console.log(++bool2)//false  1
        console.log(obj)//-1
        console.log(Boolean(obj))//true
 
二、比较运算符   关系运算符
  
  == 返回的都是Boolean类型  要么是true要么是false
        console.log(null==undefined)//true  比较的是值相等
        console.log(Boolean(null)==Boolean(undefined))//true

        >    <  number 直接比较大小
        number和Boolean比较大小是将布尔类型转换换成number
        number和字符串类型比较  如果字符串储存的是数值,就是数值比较,如果字符串储存的是字符串,自动转number类型,转不了就是NaN
        字符串和字符串比较  转换成ASCII码进行比较  每个字母都有固定的编码,区分大小写
        a  97  /  A  65   /  0   48
        console.log(true>3)//false  true=1<3
        console.log(true==1)//true
        console.log(null==false)//false  null不会自动转换成Boolean
        console.log(undefined==false)//false  undefined也不会自动转换boolean


         >=  <= 只要满足其中一条
        console.log(true>=1)//true
        console.log(false<=1)//true

        !=  不等于
        console.log(2!=3)//true

        赋值
        var b=10
        var a=b++
        console.log(a)//10
        var c=++b
        console.log(c)//12

        NaN特性  不能进行比较  返回结果false
        var na=Number('ABC')
        console.log(NaN==Number('ABC'))//false
        console.log(na==na)//false
        console.log(na==NaN)//false

        恒等===  不仅要比较值还要比较地址   ==是比较值
        var a='123'
        var b=123
        console.log(a==b)//true
        console.log(a===b)//false
 
三、逻辑运算符
  
  与&& 同true则为true  其他是false
       与&& 所有条件都是true的时候返回的才是true  
        console.log('A'<'a' && 2>1) //true
        console.log('A'>'a' && 2>1)//false

        或|| 一个是true就是true  
        console.log('A'<'a' && 2>1) //true
        console.log('A'>'a' && 2>1)//true

        !非  取反  true变false  false变true
        console.log(!('A'>'a'))//true
        console.log(!('A'<'a'))//false

        undefined转换为number是NaN
        undefined值不需要转换
        var number1,number2=10
        console.log(number1!=number2 && number1<number2)//false
        console.log(number1!=number2 || number1<number2)//true
        console.log(number1<number2 || !(number1<number2))//true

        验证用户名和密码
        var uname='rose'
        var password='jack'
        console.log(uname==='rose')//true
        console.log(uname=='rose' && password==='jack')//true
        console.log(uname=='rose' || !(password=='jack'))//true
        password=123
        console.log(uname=='rose' && password==='123')//false

        console.log(1&&2)//true
        console.log(""||3)//true
        console.log(''||0)//false
 
四、三元运算符   三目运算符
  
        表达式  ?true的结果  :false的结果
        console.log(!0) ?10 :20 //非0为true  10
        console.log(1!=1) ?10 :20 //false  20
        var num = 1!=1 ?10 :20
        console.log(num ?'a' :  'b')//a
        var num1= 1!=1 ?'a' : null
        console.log(num1 ?'a' :'b')//b

        var num3='a'>'B' ?12+'3' :24/2
        console.log(num3)//123
        console.log(typeof num3)//string

        2怎么快速变成8  
        位移运算 针对2进制
        10    1000
        console.log(2<<2);

        1+1  和  1-1  哪个运算速度快
        1-1快因为进位需要时间
 
五、if分支
  
  浏览器解析度结构是顺序结构  从上到下   从左到右
       if(布尔类型表达式){
         分支1
      }else{
      不满足上述条件进入else
       }
      如果我有5元钱 我就买冰激凌  如果没有我就去搬砖
        var money=10
        if(money>=5){
            console.log("买冰激凌")
        }else{
            console.log("搬砖")
        }

       多个分支  一旦进行其中一个分支就不会再进行下一个
        money=200
        if(money>200){
            console.log("去玩耍")
        }else if(money>100){
            console.log("买零食")
        }else{
            console.log("去搬砖")
        }

       分支块里执行的语句只有一句的时候,就可以省略对应的{}

       循环结构  多个循环
       件会找最先满足的if块  都不满足进入else
       保持缩进  代码规范  方便他人阅读
       不建议不写{}
       分支语句的嵌套  无限嵌套  但是嵌套的越多,时间复杂度就越大 执行越慢
        var t1= 10!=='10'//true
        var t2= 20!=='20' ?0 :1 //0  false
        var t3= 30+'10'==3010 ?null :10 //null  false
        if(t1){
            console.log("进入第一个if")
            if(t2){
                console.log("进入第二个if")
                if(t3){
                    console.log("进入第三个if")
                }else{
                    console.log("进入第三个else")
                }
            }else{
                console.log("进入第二个else")
            }
        }else{
            console.log("进入第一个else")
        }

       满足第一个  不满足第二个进入第二个的else中  没机会进入第三个了
 
六、switch分支
 
  
  switch  属于分支结构
       if里面的表达式为Boolean类型表达式
       switch为值表达式  undefined  确定的值
       swith和case一起使用
       break  跳出这个switch块
       当不存在break的时候他会从匹配的选项走到底
       js的switch支持任意类型值   但不支持NaN
       case 后面跟有实际值


       switch(值表达式){
             case 值1:
             case 值2:
             case 值n:
             default:
        }
        var a
        switch(a){
            case undefined:
                console.log("一条语句")
                break;
            case 'undefined':
                console.log("undefined 的string类型")
            default:
                console.log("默认语句")
                break;
        }

      判断一个成绩
        var s=59
        switch(s){
            case 60:case 59:case 58:
                console.log("你及格了")
                break;
        }
  
 
posted @ 2022-03-21 08:34  凌晨四点钟  阅读(30)  评论(0)    收藏  举报