<h3>for循環(huán)</h3>
要計算1+2+3,我們可以直接寫表達式:
1 + 2 + 3; //6
要計算1+2+3+...+10,勉強也能寫出來。
但是,要計算1+2+3+...+10000,直接寫表達式就不可能了。為了讓計算機能計算成千上萬次的重復運算,我們就需要用循環(huán)語句。
JavaScript的循環(huán)有兩種,一種是for循環(huán),通過初始條件、結(jié)束條件和遞增條件來循環(huán)執(zhí)行語句塊:
var x = 0;
var i;
for (i=1; i<=10000; i++) {
x = x + i;
}
x; //50005000
for循環(huán)的控制條件:
· i=1 這是初始條件,將變量i置為1;
· i<=10000 這是判斷條件,滿足時就繼續(xù)循環(huán),不滿足就推出循環(huán);
· i++ 這是每次循環(huán)后的遞增條件,由于每次循環(huán)后變量i都會加1,因此它終將在若干次循環(huán)后不滿足判斷條件i<=10000而退出循環(huán)。
</br>
for循環(huán)最常用的地方是利用索引來遍歷數(shù)組:
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for(i= 0; i<arr.length; i++){
x = arr[i];
alert(x);
}
for循環(huán)的3個條件都是可以省略的,如果沒有退出循環(huán)的判斷條件,就必須使用break語句退出循環(huán),否則就是死循環(huán):
var x = 0;
for( ; ; ) { //將無限循環(huán)下去
if(x > 100){
break; // 通過if判斷來退出循環(huán)
}
x++;
}
</br>
<h3>for ... in</h3>
for循環(huán)的一個變體是for... in循環(huán),它可以把一個對象的所有屬性依次循環(huán)出來:
var o = {
name: 'Jack',
city: 'Beijing'
};
for (var key in o) {
alert(key); // 'name', 'age', 'city'
}
要濾掉對象繼承的屬性,用hasOwnProperty()來實現(xiàn):
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
if(o.hasOwnProperty(key)) {
alert(key); // 'name', 'age', 'city'
}
}
由于Array也是對象,而它的每個元素的索引被視為對象的屬性,因此,for ... in 循環(huán)可以直接循環(huán)出Array的索引:
var a = ['A', 'B', 'C'];
for (var i in a ) {
alert(i); // '0', '1', '2'
alert(a[i]); // 'A', 'B', 'C'
}
<u>請注意, for ... in 對 Array的循環(huán)得到的是String 而不是 Number</u>。
</br>
<h3>while</h3>
for循環(huán)在已知循環(huán)的初始和結(jié)束條件時非常有用。而上述忽略了條件的for循環(huán)容易讓人看不清循環(huán)的邏輯,此時用while循環(huán)更佳。
while循環(huán)只有一個判斷條件,條件滿足,就不斷循環(huán),條件不滿足時則退出循環(huán)。比如我們要計算100以內(nèi)所有奇數(shù)之和,可以用while循環(huán)實現(xiàn):
var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x; // 2500
在循環(huán)內(nèi)部變量n不斷自減,直到變?yōu)?1時,不再滿while條件,循環(huán)退出。
</br>
<h3>do ... while</h3>
最后一種循環(huán)是do { ... } while()循環(huán),它和while循環(huán)的唯一區(qū)別在于,不是在每次循環(huán)開始的時候判斷條件,而是在每次循環(huán)完成的時候判斷條件:
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100
用do { ... } while()循環(huán)要小心,循環(huán)體會至少執(zhí)行1次,而for和while循環(huán)則可能一次都不執(zhí)行。