JS中常用的三种判断及循环语句

1,041 阅读5分钟

JS中常用的三种判断语句

  • 在JS的代码中,我们会存在一些逻辑判断
    • if、else if、else
    • 三元运算符
    • switch case

if条件判断:

 if(条件1){
    // 条件1成立做的事情
 }else if(条件2){
    // 条件2成立做的事情(前提条件1不成立,否则走不到这个判断中)
 }
 ...
 else{
    // 以上条件都不成立做的事情
 }

单独用
if(条件){...}
if(条件){...}else{...}  <=>  条件?...:...;
...

    
  条件:
    if(1){...}  把值转换为布尔判断真假
    if(n==10){} 正常条件  == / === / >= / <= / > / <
    if(n==1 || m==2){}  多条件 ||或者(一个为真,整体则为真)  &&并且(都为真,整体才是真)
    if(n==1 && m==2){}
  • 简单的if-else语句应用:
        let x=10;
        if(x>=10)
        {
            x++;
        }
        else
        //以上条件都不成立,执行else
        {
            x--;
        }
        console.log(x);

结果为

image.png

       let x='10';
        if(x==1)
        {
            x+=1;
        }else if(x==5){
            x+=2;
        }else if(x==10){ //把字符串'10'转化为数字10进行比较, 条件成立
            x+=3; //字符串拼接 '103'
        }else{
            x+=4;
        }
        console.log(x); // =>'103'

结果为:

image.png

三元运算符:处理最简单的if/else情况的

  • 条件?条件成立做的事情:条件不成立做的事情;
    • 如果需要做多件事情,则用小括号包起来,每一件事情中间用逗号分隔即可.

应用举例:

        let x=10;
        if(x>=10)
        {
            x++;
        }
        else
        {
            x--;
        }
        console.log(x);
        //改为三元运算符
        let x=10;
        x >= 10 ? x++ : x--
        console.log(x);

结果为:

image.png

  • 在条件成立的时候,如果不想做一些事情,则使用null/undefined等来占位即可,不占位则会报错
        let x=10;
        if(x==10)
        {
            x++;
        }
        console.log(x);
        //改为三元运算符
        let x=10;
        x==10 ? x++ : null
        console.log(x);

结果为:

image.png

可以根据需求完成三元运算符的嵌套

         let x=10;
         if(x>0)
         {
             if(x<10)
             {
                 x++;
             }else{
                 x--;
             }
         }else{
             x--;
         }
         console.log(x);
         //改为三元运算符
         let x=10;
         x>0 ? (x<10? x++:x--) : x--; 
         console.log(x);

结果为:

image.png

switch case语句:

  • 只能应用于等于什么值做什么事情,不能用于大于或小于什么值做什么事情.

  • 每一种情况结束都要设置break,最后一个default等价于else,而且最后一个判断结束无需设置break.

        //一个变量在不同值情况下的不同操作,我们可以改写为switch case判断
        let x='10';
        if(x==1)
        {
            x+=1;
        }else if(x==5){
            x+=2;
        }else if(x==10){ //把字符串'10'转化为数字10进行比较, 条件成立
            x+=3; //字符串拼接 '103'
        }else{
            x+=4;
        }
        console.log(x); // =>'103'
        //改写为switch case语句
        let x='10';
        switch(x)
        {
            case 1: //=>在x等于1的情况下做什么
                x+=1;
                break, //每一种情况结束都要设置break.(以供当此条件成立并处理完事情后,通知不再向下执行代码)
            case 5:
                x+=2;
                break;
            case 10:
                x+=3;
                break;
            default: //等价于else,而且最后一个判断结束无需设置break.
                x+=4;
        }
        console.log(x); //=>'104' 每一种case情况都是基于===进行比较的(严格比较,需要保证数据类型的一致)
        




结果为:

image.png

JS中常用的三种循环语句

  • 循环:多次重复进行某些事情的处理
    • for循环
    • for in循环
    • while循环
    • ...

for 循环

  • 设定初始值
  • 设定/验证循环执行的条件
  • 符合条件的执行循环体中的代码
  • 基于步长累加进入下一轮循环

for循环举例:

       for (var i = 0; i < 5; i++) 
        {
            // 循环体:重复做的事情(代码块)
            //console.log(i); // 符合条件i<5i输出  0 1 2 3 4
        }
        console.log(i); // =>5i=5的时候循环结束,这时i=5. 
        //  i=0  =>0  
        //  i=1  =>1
        //  i=2 
        //  ...
        //  i=5  循环结束 

结果为:

image.png

       // 死循环:因为i永远是10,这样循环条件 i>=0 一直成立
        var i = 10;
        for (; i >= 0;) 
        {
            console.log(i); //=> 10
        } 



        // i-=2  => i=i-2
        // i++   => i+=1  => i=i+1
        var i = 10;
        for (; i >= 0; i -= 2) 
        {
            console.log(i); //=> 10 8 6 4 2 0
        }
        console.log('循环结束', i); //=>-2i=-2的时候循环结束,这时i=-2. 
        //上面这个和下面这个结果是一样的
        var i = 10;
        for (; i >= 0;) 
        {
            console.log(i);
            i -= 2;
        } 
        console.log('循环结束', i); //=>-2i=-2的时候循环结束,这时i=-2. 

结果为:

image.png

while循环

  • while 循环:我们在语法上只关注条件

    while(条件){ // 条件成立执行 }

while循环举例:

       var i = 10;
        for (; i >= 0; i -= 2) 
        {
            console.log(i); //=> 10 8 6 4 2 0
        }
        console.log('循环结束', i); 
        //把上面的for循环改写成 while 循环
        var i = 10;
        while (i >= 0) {
            console.log(i);
            i -= 2;
        } 

结果为: image.png

for in循环

  • 需求:依次遍历(迭代)数组或者对象中的每一项.
  • 数组对象:特殊的对象(具备索引[索引从0开始]和length属性) ,数组的遍历一般用for循环. (但for循环只能遍历数字索引的每一项,不会遍历length属性的属性值).
  • 类数组结构:不是数组,但是结构和数组非常的相似,它的遍历是可以用for循环的 (但for循环只能遍历数字索引的每一项).
  • 普通对象:它的遍历是不能基于for循环处理的,因为没有代表有多少组键值对的length,也不像数组属性名都是数字索引...不具备数组这种结构的对象,是用不了for循环的.
  • 遍历普通对象中的每一项,可以基于for in循环.
  • for循环不是直接去迭代(遍历)数组或类数组中的每一项的,它是根据length的长度构建了一个循环n次的循环,每一次循环,把i变量的值作为索引,到数组或类数组中去查找对应索引的值,从而得到了我们所谓的数组当前项.
  • for in循环直接作用在对象结构上,有多少组键值对,就会循环多少次.

遍历普通对象中的每一项,可以基于for in循环.

  • for in循环:对象中有多少组键值对,就会循环多少次.
    • key:变量,存储的是当前迭代的属性名.

    • 在迭代的时候,是优先按照从小到大的顺序遍历数字属性名的.

        var obj = {   
            name: 'yunduo',
            age: 11,
            0: 10,
            2: 30
        };
        for (var key in obj) {
            //console.log(key); //=> 0 2 "name" "age"
            console.log(obj[key]); // 获取当前遍历成员的属性值

            // obj.key 与 obj[key]的区别
            // obj.key : 获取obj对象中成员为"key"属性名对应的属性值 undefined
            // obj[key] : 此处的key是一个变量,把每一轮循环key变量存储值作为成员,
                          到对象中查找对应的属性值 obj[0] obj[2]...
        } 


结果为:

image.png

  • 数组和类数组可以基于for循环遍历每一项(指定的是数字索引的每一项);
  • 而对象只能基于for in遍历每一项;但是数组和类数组也是对象,也可以基于for in遍历.

类数组

       var arrayLike = {
            0: 10,
            1: 20,
            2: 30,
            x: 100,
            y: 200,
            length: 3
        };
        for (var key in arrayLike) 
        {
            console.log(key); //for in循环6次 0 1 2 x y length
        }
        for (var i = 0; i < arrayLike.length; i++) 
        {
            console.log(arrayLike[i]); //for循环3次 10 20 30
        } 

结果为:

image.png

数组

        var arr = [10, 20, 30];
        for (var key in arr) {
            console.log(key); //for in 循环三次 0 1 2 
            // 原因:数组结构中的length属性是内置的(而且这个属性是不可枚举的:不能被for in遍历)
        } 
 

结果为:

image.png

break continue关键词

  • continue 结束当前这一轮循环(循环体中,continue下面代码不执行了),继续执行下一轮(步长累计还需要执行)

  • break 结束整个循环(循环体中,break下面代码不执行了,并且步长累计也不执行了) continue和break举例:

        for (var i = 0; i < 10; i++) 
        {
            if (i >= 3) 
            {
                console.log(i);
                i += 2;
                continue;
            }else{
                console.log(i);// 0 
                i += 3;
                break; //整个for循环结束
            }
            console.log(i);
        }
        console.log(i);// 3

结果为:

image.png

        for (var i = 0; i < 10; i++) 
        {
            if (i >= 3) 
            {
                console.log(i); // 3 6 9
                i += 2;
                continue;
            }
            if (i >= 6) 
            {
                console.log(i);
                i += 3;
                break;
            }
            console.log(i); // 0 1 2 
        }
        console.log(i); // 12

结果为:

image.png