JS中的循環語句是JS基礎的最最重要的部分,沒有之一,后面所學的其他的一些重要的知識也是需要在此的基礎啥古玩城更高級的設置,先來簡單的說一下循環的一些知識點。
一、循環結構的執行步驟
1、聲明循環變量;
2、判斷循環條件;
3、執行循環體操作;
4、更新循環變量;
然后,循環執行2-4,直到條件不成立時,跳出循環。
while循環()中的表達式,運算結果可以是各種類型。但是最終都會轉為真假,轉換規則同if結構。
while循環特點:先判斷,再執行;
do-while循環特點:先執行,再判斷;即使初始條件不成立,do-while循環也至少執行一次。
二、for循環
1、for循環有三個表達式:
①聲明循環變量 ②判斷循環條件 ③更新循環變量
三個表達式之間,用;分隔
for循環三個表達式都可以省略,但是兩個;缺一不可
2、for循環的執行特點:先判斷,再執行;與while相同
3、for循環三個表達式都可以由多部分組成,第二部分多個判斷條件用&& ||鏈接,第一三部分用逗號分隔;
循環控制語句
① break:跳出本層循環,繼續執行循環后面的語句。
如果循環有多層嵌套,則break只能跳出一層。
② continue:跳過本次循環剩余的代碼,繼續執行下一次代碼。
a、對於for循環,continue之后執行的語句,是循環變量更新語句i++;
b、對於while、do-while循環,continue之后執行的語句,是循環條件判斷;
因此,使用這兩個循環時,必須將continue放到i++之后使用。否則continue將跳過i++,導致死循環。
三、if-else結構
1、結構寫法:
if(判斷條件){
條件為true時,執行if的{}
}else{
條件為false時,執行ease的{}
}
2、注意事項:
①else{}語句塊可以根據情況省略;
②if和else后面的{}可以省略,但是省略{}后,if和else后面只能跟一條語句;(所以,不建議省略);
3、【重點】if的{}中的判斷條件支持的情況:
①Boolean:true為真,false為假;
②String:空字符串為假,所有非空字符串為真;
③Number:0為假,一切非零數字為真;
④undefined null NAN:全為假;
⑤Object:全為真;
四、多重if、階梯if結構
1、結構寫法:
if(條件一){
條件一成立,執行的操作
}else if(條件二){
條件一不成立&&條件二成立,執行的操作
}else if{
上述所有的條件都不成立,執行的操作
}
2、多重if結構中,各個判斷條件是互斥的,執行選擇其中一條路執行。遇到正確選項並執行完以后,直接跳出結構,不再判斷后續分支。
五、嵌套if結構
1、結構寫法:
if(條件一){
條件一成立
if(條件二){
條件一成立 && 條件二成立
}else{
條件一成立 && 條件二不成立
}
}else{
條件一不成立
}
2、在嵌套if結構中,如果省略{},則else結構永遠屬於離他最近的一個if結構;
3、嵌套結構可以多層嵌套,但是一般不推薦超過3層。
能用多層if結構的一般不推薦使用嵌套if。
六、switch-case
1、結構寫法
2、注意事項:
①switch結構()中的表達式,可以使用各種js支持的數據類型;
②switch機構在進行判斷的時候,使用的===判斷;
③case后面的表達式可以是各種數據類型,但是值要求各不相同,否則也只會執行第一個case;
④break作用:執行完case代碼后,跳出當前switch結構;
缺少break后果:從第一個正確的case項開始,執行后面的所有case和default;原因:⑤↓
⑤switch結構在進行判斷的時候,只會判斷一次正確答案。當遇到正確的case之后,將不會再判斷后續的項目。
⑥switch結構的執行效率要比多重if快。在多路分支結構中,推薦優先使用switch。
[循環嵌套的規律]:外層循環控制行數,內層循環控制每行中的個數
七、圖形題做題思路
1、確定一共有幾行。行數即為外層循環的次數
2、確定每行中有幾種元素組成,有幾種元素,即表示有幾個內層循環
3、確定每種元素的個數,這個個數即為每個內層循環的次數
tips:如果每種元素個數不固定則,找出每種元素個數,與行號關系。這個關系表達式,即為內層循環的最大值
八、循環語句用的一些例子
1、猜數字的小游戲
<script type="text/javascript"> var ans=5; do{ var num=prompt("請輸入你的猜測"); if(num>ans){ alert("您輸入的數字偏大"); }else if(num<ans){ alert("您輸入的數字偏小"); }else{ alert("猜對了!"); } }while(num!=ans); </script>
這僅僅是用JS做出來的,雖然看起來比較簡陋,但是該有的功能都用循環語句實現了
2、倒序輸出
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var num=parseInt(prompt("請輸入一個整數")) while(num>0){ var a=num%10; document.write(a); num=parseInt(num/10); } </script> </head> <body> </body> </html>
我們在一些網頁見到的,把一些數字整個顛倒
3、求和
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var sum=0,count=0; for(var i=1;i<=10;i++){ var num=parseInt(prompt("請輸入一個數字")); if(num==999) break; if(num>0){ count++; sum+=num; } } document.write("您輸入了"+count+"個正數,"+"和為:"+sum); </script> </head> <body> </body> </html>
這個功能就是只要輸入進去的數小於999就會讓你一直輸,直到你輸入的數大於999才會停止循環,並且把你大於999之前輸入的次數打印出來,並且把那些求和。
4、求位數
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var num=parseInt(prompt("請輸入一個整數")); var w=0; do{ num=parseInt(num/10); w++; }while(num>0); document.write("該整數是"+w+"位數"); </script> </head> <body> </body> </html>
求出一個數是幾位數,可以更加方便我們的計算
5、輸入年月日,求該天是今年的第幾天
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> // ① 拿到年月日 var year = parseInt(prompt("請輸入 年份:")); var mon = parseInt(prompt("請輸入 月份:")); var day = parseInt(prompt("請輸入 日期:")); // ② 根據月份求出當前月,之前的所有月份的天數和; var days = 0; for(var i=1; i<mon; i++){ if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){ days += 31; }else if(i==4||i==6||i==9||i==11){ days += 30; }else { // 2月份多少天,需要判斷是否是閏年 if(year%4==0&&year%100!=0 || year%400==0){ days += 29; }else{ days += 28; } } } days += day; // 將當前月份的天數,加上 document.write("這是今年的第"+days+"天"); </script> </head> <body> </body> </html>
感覺這個還是挺實用,但是好像一般並不需要計算是改年的第幾天。還有用switch-case來做的
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> // ① 拿到年月日 var year = parseInt(prompt("請輸入 年份:")); var mon = parseInt(prompt("請輸入 月份:")); var day = parseInt(prompt("請輸入 日期:")); var days = 0; // ② 根據月份求出當前月,之前的所有月份的天數和; switch (mon-1){ case 11: days += 30; case 10: days += 31; case 9: days += 30; case 8: days += 31; case 7: days += 31; case 6: days += 30; case 5: days += 31; case 4: days += 30; case 3: days += 31; case 2: if(year%4==0&&year%100!=0 || year%400==0) days += 29; else days += 28; case 1: days += 31; case 0: days += 0; } days += day; // 將當前月份的天數,加上 document.write("這是今年的第"+days+"天"); </script> </head> <body> </body> </html>
6、求水仙花數
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var a,b,c; for(var i=100;i<1000;i++){ a=i%10; b=parseInt(i/10)%10; c=parseInt(i/100); if(a*a*a+b*b*b+c*c*c===i){ document.write(i+" "); } } </script> </head> <body> </body> </html>
在學C語言的時候就接觸到的水仙花數,現在可以直接用JS代碼來直接求出
7、斐波那契數列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var a=1,b=1,c; document.write("1 1 ") for(var i=3;i<=18;i++){ c=a+b; document.write(c+" "); if(i%5==0) document.write("<br />") a=b; b=c; } </script> </head> <body> </body> </html>
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
九、關於循環語句的一些感想
51的循環語句學的並不是很好,可以說是看見循環語句就有些頭疼,但是51還是選擇把他整理出來了。本來就不好,怎么就可以這樣放下呢,如果緊急這樣就放棄了,那51還學這些干嘛,還有更難得困難在后面,51得好好加油才行。