深度挖掘JS流程控制语言

条件语句 if、switch

if
if(表达式隐式转换后为true){
	执行语句块
 }
        //i=0 赋值会返回等号右边的值
        //i==0 比较,隐式转换后比较i,有可能是0,false,"",这三种值都可以进入
        //i===0 精确比较 只有i是0时 才可以有进入条件

var obj;
if(obj.a){
     console.log("a");
}//显示undefined     因此如果要判断变量是否存在某个属性,要使用熔断,将判断obj是否存在加入
if(obj&&obj.a){}

if else 语句理论报错后不会执行else语句

if(b>3){   console.log("aaa");   }
else{    console.log("bbb");    }
//因为b没有被定义所有会报错

如果报错后还想执行,可以使用

try{
      尝试执行的语句块
}catch(error){
       //如果尝试执行的语句块错误失败,会执行该代码块
       //报错后,不继续执行后面的语句,直接执行catch
}finally{
       //不管上述哪种都会执行该代码块
}

多分支条件判断

a=90;
            if(a>=90 && a<=100){
                console.log("甲等");
            }else if(a>=80){
                console.log("乙等");
            }else if(a>=70){
                console.log("丙等");
            }else if(a>=60){
                console.log("丁等");
            }else{
                console.log("不及格");
            }
            
// 上面的一次判断,条件可以根据上次的省略部分
// 下面的多次判断,条件必须全面

		  if(a>=90 && a<=100){
                console.log("甲等");
            }
            if(a>=80 && a<90){
                console.log("乙等");
            }
            if(a>=70 && a<80){
                console.log("丙等");
            }
            if(a>=60 && a<70){
                console.log("丁等");
            }else{
                console.log("不及格");
            }
  • 遇到多分之条件时,触发条件次数多的写在上面,触发条件次数少的写在下面
  • 如果语句块仅有一句时,花括号可以省略 如果没有{},默认仅执行条件语句的第一句
switch
 switch(表达式)
            case 值1:
            break;
            default :
           
// 状态分支  状态机
 switch(表达式){
                case "值1":
                //  当满足表达式的值绝对与值1相等(===)执行这里的语句
                case "值2":
                // 如果值1的语句后面没有使用break,则自动穿越值2,不判断相等,直接执行值2后面的内容
                //  当满足表达式的值绝对与值2相等(===)执行这里的语句
                break;//当使用break,不继续向下穿越跳出该条件语句
                default:
                // 默认如果表达式与以上所有值都不相等时,执行default后面的语句
                // 一般default中不需要写 相等条件和break
      
  var s=90;
//如果switch判断的内容不是相等(确定)情况下,可以使用true作为switch的表达式
//在case中描述条件,用条件为true的执行对应的语句
        switch(true){
            case s>=90 && s<=100: 
            console.log();
            break;
            case s >=80: 
            console.log();
            break;
            case s >=70: 
            console.log();
            break;
            default:
        }
 //颜色变化红黄绿靛蓝紫红循环
 	    var r=255,g=0,b=0;
        var state=0;
        var div1 = document.getElementById("div1");
        setInterval(function(){
            switch(state){
                case 0: 
                    g++; 
                    if(g===255) state=1;
                    break;
                case 1: 
                    r--; 
                    if(r===0) state=2;
                    break;
                case 2: 
                    b++; 
                    if(b===255) state=3;
                    break;
                case 3: 
                    g--;
                    if(g===0) state=4;
                    break;
                case 4: 
                    r++; 
                    if(r===255) state=5;
                    break;
                case 5: 
                    b--;
                    if(b===0) state=0;
                    break;
                
        }
        div1.style.backgroundColor="rgba("+r+","+g+","+b+",1)";
        },16)

 // 当条件在处理时发生冲突,需要考虑使用状态来做为唯一判断标准

循环

while

三要素:
1、初始变量
2、进入循环的条件
3、有不断向循环外变化的表达式
while(表达式) 如果表达式隐式转换为布尔值时是true,则进入循环

求出1的个数
   	 var i=15;
       var n=1;
       while(i=i&(i-1))n++;
       console.log(n);
 
 // 斐波那契数列
       var n=0;
       var m=1;
       var s=n+m;
       var o;
       var str=n+"+"+m;
       while(m<100){
           o=m;
           m=n+m;
           n=o;
           s+=m;
           str+="+"+m;
       }
       console.log(s,str);

//求水仙花数     100-999   135=1*1*1+3*3*3+5*5*5
       var n=100;
       while(n<1000){
           var a1=parseInt(n/100);
           var a2=parseInt(n%100/10);
           var a3=n%10
           if(n===a1*a1*a1+a2*a2*a2+a3*a3*a3) console.log(n);
           n++;
       }

//在table中用循环添加单元格
   	var table1=document.getElementById("table1");
       var row=0;
       var col=0;
       var str="";
       while(row<10){
           str+="<tr>";
           col=0;//每次循环后必须重新归位
           while(col<10){
               str+="<td></td>";
               col++;
           }
           str+="</tr>";
           row++;
       }
    table1.innerHTML=str;

// 给数组中添加30个不同的随机数
   		 var arr=[],a,i=0;
           while(arr.length<30){
               a=parseInt(Math.random()*100);
               var flag=true;
               while(i<arr.length){
                   if(a===arr[i]) flag=false;
                   i++;
               }
               if(flag===true) arr.push(a);

           }
           console.log(arr);

continue和break的区别

  • 给循环增加别称,可以通过break 别称;跳出指定的循环
  • 如果满足条件,continue后面的语句不继续执行,仍然循环,而break是直接跳出当前循环;
  • continue在多个条件中间不进入时使用最为方便;
     var i=0;
         var n;
        
        while(i<10){
             n=0;
             while(n<10){
                 n++;
                 if(i===5 && n===5) break;
                 console.log(i,n);
             }
             i++;
         } 
    

var i=0;
var n;

   while(i<10){
        n=0;
        while(n<10){
            n++;
            if(i===5 && n===5) continue;
            console.log(i,n);
        }
        i++;
    } 
字符串的方法 charCodeAt()获取字符串中指定位置字符的ASCII码
      //a 97 z 122 A65 Z90 0 48 9 57
      //String.fromCharCode()将ASCII码转换为字符
      
	  var i=48;
      while(i<123){
          if(i>57 && i<65 || i>90 && i<97){
              i++;
              continue;
          }
          console.log(String.fromCharCode(i));
          i++;
      }
//求2-100之间的所有质数
 // 57   2-56
        var i=2;
        var n;
        var flag;
        while(i<100){
           n=2;
           flag=true;
           while(n<i){
               if(i%n===0){
                flag=false;
                break;
               }
               n++;
           }
           if(flag) console.log(i);
            i++;
        }
 //广度遍历 深度遍历
      var link={value:1,next:{value:2,next:{value:3,next:null}}}
      while(link){
          console.log(link.value);
          link=link.next;
      }

var tree={value:1,left:{value:2,left:{value:3,left:{value:4,left:null,right:null}},right:null},right:null};
      var arr=["a","b","c","d","e"];
      var o={value:1,a:{value:2,b:{value:3,c:{value:4,d:{value:5,e:{value:6}}}}}}
      var i=0;
      while(o){
          console.log(o.value);
          var key=arr[i];
          o=o[key];
          i++;
      }
do while
  • 先执行,后判断条件是否继续循环
  • 尽量规定左侧条件,以根据第一次执行语句块完成后判断是否继续循环
  • 适合用于循环条件不确定,并且没有初值
		var s;
        do{
            s=parseInt(Math.random()*100);
            console.log(s);
        }while(s<50);
        console.log(s);
for
		var i=0  在循环前仅作1次
        i<10  在循环前判断是否进入循环 ,每次判断
        i++ 在循环语句块执行完成后,下一次循环条件判断之前执行表达式
        for(var i=0;i<10;i++){
     }
	1.	for(var i=10;i;i--){
            console.log(i);
        }
        
	2.	for(var s=0,i=0;i++<100;s+=i,console.log(s));
        console.log(s);
        
    3. var link={value:1,next:{value:2,next:{value:3,next:{value:4,next:null}}}};
       for(;link;link=link.next) console.log(link.value);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值