要計(jì)算1+2+3,我們可以直接寫(xiě)表達(dá)式:
1 + 2 + 3; // 6
要計(jì)算1+2+3+...+10,勉強(qiáng)也能寫(xiě)出來(lái)。
但是,要計(jì)算1+2+3+...+10000,直接寫(xiě)表達(dá)式就不可能了。
為了讓計(jì)算機(jī)能計(jì)算成千上萬(wàn)次的重復(fù)運(yùn)算,我們就需要循環(huán)語(yǔ)句。
JavaScript的循環(huán)有兩種,一種是for循環(huán),通過(guò)初始條件、結(jié)束條件和遞增條件來(lái)循環(huán)執(zhí)行語(yǔ)句塊:
var x = 0;var i;for (i=1; i<=10000; i++) { x = x + i;}x; // 50005000讓我們來(lái)分析一下for循環(huán)的控制條件:
i=1 這是初始條件,將變量i置為1;
i<=10000 這是判斷條件,滿(mǎn)足時(shí)就繼續(xù)循環(huán),不滿(mǎn)足就退出循環(huán);
i++ 這是每次循環(huán)后的遞增條件,由于每次循環(huán)后變量i都會(huì)加1,因此它終將在若干次循環(huán)后不滿(mǎn)足判斷條件i<=10000而退出循環(huán)。
練習(xí)
利用for循環(huán)計(jì)算1 * 2 * 3 * ... * 10的結(jié)果。
for循環(huán)最常用的地方是利用索引來(lái)遍歷數(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個(gè)條件都是可以省略的,如果沒(méi)有退出循環(huán)的判斷條件,就必須使用break語(yǔ)句退出循環(huán),否則就是死循環(huán):
var x = 0;for (;;) { // 將無(wú)限循環(huán)下去 if (x > 100) { break; // 通過(guò)if判斷來(lái)退出循環(huán) } x ++;}for ... in
for循環(huán)的一個(gè)變體是for ... in循環(huán),它可以把一個(gè)對(duì)象的所有屬性依次循環(huán)出來(lái):
var o = { name: 'Jack', age: 20, city: 'Beijing'};for (var key in o) { alert(key); // 'name', 'age', 'city'}要過(guò)濾掉對(duì)象繼承的屬性,用hasOwnProperty()來(lái)實(shí)現(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也是對(duì)象,而它的每個(gè)元素的索引被視為對(duì)象的屬性,因此,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'}請(qǐng)注意,for ... in對(duì)Array的循環(huán)得到的是String而不是Number。
while
for循環(huán)在已知循環(huán)的初始和結(jié)束條件時(shí)非常有用。而上述忽略了條件的for循環(huán)容易讓人看不清循環(huán)的邏輯,此時(shí)用while循環(huán)更佳。
while循環(huán)只有一個(gè)判斷條件,條件滿(mǎn)足,就不斷循環(huán),條件不滿(mǎn)足時(shí)則退出循環(huán)。比如我們要計(jì)算100以?xún)?nèi)所有奇數(shù)之和,可以用while循環(huán)實(shí)現(xiàn):
var x = 0;var n = 99;while (n > 0) { x = x + n; n = n - 2;}x; // 2500
新聞熱點(diǎn)
疑難解答
圖片精選