昨天兔小白太忙了,沒有完成家庭作業,沒關系,今天講的東西比較簡單,給兔子一個緩沖的時間。
今天繼續講語句,來看看用得第二多的循環語句吧。
1、for循環語句
for循環語句可以将某段代碼反複執行一定的次數,我們直接用例子講文法。比如我們要在頁面上連續跳10次提示框,可以這麼寫:
for(var i = 0;i < 10;++i){
window.alert("ALARM");
}
當然啦,隻有搗亂的程式才會這麼不停的彈提示框,咱們不管它,來看文法。for語句由三段組成,第一段是初始化用的,這裡我們定義了一個變量i,賦了初值0。第二段是判斷條件,表示條件滿足時才會繼續循環,這裡寫的是i<10,表示隻要變量i的值小于10,就一直循環。第三段是增量語句,這裡每循環一次就自增i的值,是以循環10次以後,i=10,就不再滿足循環條件了,是以循環就退出了。
for語句還能有一些變化:
//用多個變量也可以喲
for(var i = 0,j = 0;i +j < 10;++i,++j){
//do something
//用自減也可以喲
for(var i = 100;i > 0;--i){
//判斷條件不僅限于循環變量喲,可以與外部變量結合使用
for(var i = 0;i < 10 && !userCancel;++i){
//什麼都不寫,會死循環的,這種情況要在内部按某種條件強行退出循環
for(;;){
與循環語句經常一起出現的還有兩個關鍵字:break和continue,前者用于強行退出循環,後者用于忽略本次循環後面的語句,直接進入下一次循環。看個例子:
var rnd = 0;
//生成一個100以内的随機數,看着眼熟不?嘿嘿
rnd = Math.floor(Math.random() * 100);
//如果這個随機數大于60,就退出循環
if(rnd > 60)
break;
2、for...in循環語句
for...in語句可以認為是for循環針對數組與對象的一個簡化的特殊用法,它經常用于周遊數組元素。下面兩種寫法是等價的,兔體會一下:
var numbers = [1, 2, 3];
for(var i in numbers){
alert(numbers[i]);
for(var i = 0;i < numbers.length;++i){
3、while循環語句
while循環也用于将一段代碼反複執行,直到條件不滿足時為止。它和for可以互相轉化,比如上面那個彈出10次提示框的for循環,用while改寫一下:
var i = 0;
while(++i < 10){
while隻有一個判斷條件,隻要條件滿足,就一直循環,是以與for相比,它經常用于無法事先判斷循環次數的場景。用while的時候要小心,如果處理不好,它可能會造成死循環喲。
4、do...while循環
while循環有個缺點,就是如果條件不滿足,它就一次循環都不執行,可是有時候我們希望我們的代碼至少執行一次,這時候do...while就派上用場了。看個例子,比如我們要讓使用者輸入一個數字,如果輸入不合法,就重新輸入,直到合法為止,用do...while會比用while舒服很多:
var num;
do{
//prompt()方法會彈一個輸入框讓使用者輸入
num = window.prompt("請輸入一個數字");
while(isNaN(num));
好了,遊戲時間到了,我們把今天的知識點組合一下,讓兔小灰來猜水果。規則是這樣的,兔小白輸入想吃的水果的名字(英文),不等兔小白輸完,兔小灰就要猜出是什麼。
<a href="http://blog.51cto.com/attachment/201206/150946517.png" target="_blank"></a>
上代碼啦,這回不算長吧?
<!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='images/" + fruitArray[i] + ".jpg' />");
}
}
//join()是數組的方法,用于把數組中的每個元素連接配接成一個字元串
//我們再把這個字元串賦給div的innerHTML屬性,就相當于把那一堆<img>加到頁面上了
get("fruits").innerHTML = fruits.join("");
</script>
<body>
兔小灰我想吃
<input type="text" id="whiteWant" onkeyup="grayGuess()" />
<img src="images/white.gif" id="white" />
<br/><br/>
<img src="images/gray.gif" id="gray" />
兔小白是不是想吃……
<div id="fruits"></div>
</body>
</html>
兔小白認真閱讀了沒?下面是家庭作業了:
1、基礎題:如果沒找到合适的水果,能不能讓兔小灰說:“這是什麼水果啊?北門的水果攤有沒?”
2、進階題:現在每次兔小灰會列出一大堆可能的水果,能不能讓他隻列最有可能的一個?
本文轉自 BoyTNT 51CTO部落格,原文連結:http://blog.51cto.com/boytnt/890216,如需轉載請自行聯系原作者