昨天兔小白太忙了,沒有完成家庭做業,不要緊,今天講的東西比較簡單,給兔子一個緩衝的時間。javascript
今天繼續講語句,來看看用得第二多的循環語句吧。html
一、for循環語句java
for循環語句能夠將某段代碼反覆執行必定的次數,咱們直接用例子講語法。好比咱們要在頁面上連續跳10次提示框,能夠這麼寫:數組
- for(var i = 0;i < 10;++i){
- window.alert("ALARM");
- }
固然啦,只有搗亂的程序纔會這麼不停的彈提示框,我們無論它,來看語法。for語句由三段組成,第一段是初始化用的,這裏咱們定義了一個變量i,賦了初值0。第二段是判斷條件,表示條件知足時纔會繼續循環,這裏寫的是i<10,表示只要變量i的值小於10,就一直循環。第三段是增量語句,這裏每循環一次就自增i的值,因此循環10次之後,i=10,就再也不知足循環條件了,因此循環就退出了。app
for語句還能有一些變化:dom
- //用多個變量也能夠喲
- for(var i = 0,j = 0;i +j < 10;++i,++j){
- //do something
- }
- //用自減也能夠喲
- for(var i = 100;i > 0;--i){
- //do something
- }
- //判斷條件不只限於循環變量喲,能夠與外部變量結合使用
- for(var i = 0;i < 10 && !userCancel;++i){
- //do something
- }
- //什麼都不寫,會死循環的,這種狀況要在內部按某種條件強行退出循環
- for(;;){
- //do something
- }
與循環語句常常一塊兒出現的還有兩個關鍵字:break和continue,前者用於強行退出循環,後者用於忽略本次循環後面的語句,直接進入下一次循環。看個例子:ide
- var rnd = 0;
- for(;;){
- //生成一個100之內的隨機數,看着眼熟不?嘿嘿
- rnd = Math.floor(Math.random() * 100);
- //若是這個隨機數大於60,就退出循環
- if(rnd > 60)
- break;
- }
二、for...in循環語句ui
for...in語句能夠認爲是for循環針對數組與對象的一個簡化的特殊用法,它常常用於遍歷數組元素。下面兩種寫法是等價的,兔體會一下:spa
- var numbers = [1, 2, 3];
- for(var i in numbers){
- alert(numbers[i]);
- }
- var numbers = [1, 2, 3];
- for(var i = 0;i < numbers.length;++i){
- alert(numbers[i]);
- }
三、while循環語句htm
while循環也用於將一段代碼反覆執行,直到條件不知足時爲止。它和for能夠互相轉化,好比上面那個彈出10次提示框的for循環,用while改寫一下:
- var i = 0;
- while(++i < 10){
- window.alert("ALARM");
- }
while只有一個判斷條件,只要條件知足,就一直循環,因此與for相比,它常常用於沒法事先判斷循環次數的場景。用while的時候要當心,若是處理很差,它可能會形成死循環喲。
四、do...while循環
while循環有個缺點,就是若是條件不知足,它就一次循環都不執行,但是有時候咱們但願咱們的代碼至少執行一次,這時候do...while就派上用場了。看個例子,好比咱們要讓用戶輸入一個數字,若是輸入不合法,就從新輸入,直到合法爲止,用do...while會比用while舒服不少:
- var num;
- do{
- //prompt()方法會彈一個輸入框讓用戶輸入
- num = window.prompt("請輸入一個數字");
- }
- while(isNaN(num));
好了,遊戲時間到了,咱們把今天的知識點組合一下,讓兔小灰來猜水果。規則是這樣的,兔小白輸入想吃的水果的名字(英文),不等兔小白輸完,兔小灰就要猜出是什麼。
上代碼啦,這回不算長吧?
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <title>兔小灰猜水果</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <style>
- *{font-size:20px;font-family:"微軟雅黑"}
- #fruits{display:inline-block;}
- </style>
- <script type="text/javascript" language="javascript">
- //定義一個全局的字符串數組,用來存兔小灰知道的全部水果(真少啊)
- var fruitArray = ["apple", "banana", "cherry", "grape", "mango", "orange", "peach", "pineapple", "strawberry", "watermelon"];
- /*
- * 這個方法和上課課的同樣喲,偷懶用的
- */
- function get(id){
- return document.getElementById(id);
- }
- /*
- * 兔小灰來猜想兔小白想吃什麼
- */
- function grayGuess(){
- //取得兔小白的輸入,爲了防止兔小白用大寫字母致使後面比對出問題,一概用toLowerCase()方法轉成小寫
- //fruits是一個空數組,兔能夠把它想象成一個空籃子,一下子咱們要往裏放過濾出來的水果圖片
- var input = get("whiteWant").value.toLowerCase(),
- fruits = [];
- //這裏用到了今天學的for...in循環了
- //咱們遍歷fruitArray中的每個元素
- for(var i in fruitArray){
- //[i]用於從數組中取第i個元素
- //咱們看這個元素是否包含兔小白的輸入,indexOf()是字符串對象的一個方法,返回子串出現的位置,若是找不到,會返回-1
- //因此判斷其返回值>=0,就代表找到了
- if(fruitArray[i].indexOf(input) >= 0){
- //push()方法用於往數組裏壓入一個元素,這裏咱們壓入一段html代碼,兔應該能看懂,就是一個<img>標籤
- fruits.push("<img src='p_w_picpaths/" + fruitArray[i] + ".jpg' />");
- }
- }
- //join()是數組的方法,用於把數組中的每一個元素鏈接成一個字符串
- //咱們再把這個字符串賦給div的innerHTML屬性,就至關於把那一堆<img>加到頁面上了
- get("fruits").innerHTML = fruits.join("");
- }
- </script>
- <body>
- 兔小灰我想吃
- <input type="text" id="whiteWant" onkeyup="grayGuess()" />
- <img src="p_w_picpaths/white.gif" id="white" />
- <br/><br/>
- <img src="p_w_picpaths/gray.gif" id="gray" />
- 兔小白是否是想吃……
- <div id="fruits"></div>
- </body>
- </html>
兔小白認真閱讀了沒?下面是家庭做業了:
一、基礎題:若是沒找到合適的水果,能不能讓兔小灰說:「這是什麼水果啊?北門的水果攤有沒?」
二、進階題:如今每次兔小灰會列出一大堆可能的水果,能不能讓他只列最有可能的一個?