循環(huán)在編程中用于自動執(zhí)行重復(fù)性任務(wù)。
例如,假設(shè)我們要打印“ Hello World” 10次??梢匀缦滤具M(jìn)行:
document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>"); document.write("Hello World<br>");
而在循環(huán)中,該語句只需編寫一次,循環(huán)將執(zhí)行10次,如下所示:
for (let i = 0; i < 10; i++) { document.write("Hello World<br>"); }測試看看?/?
for循環(huán)的語法如下:
for (initialization; condition; final-expression) { //待執(zhí)行的語句 }
initialization在執(zhí)行語句之前執(zhí)行(一次)。
condition定義了執(zhí)行語句的條件。
在執(zhí)行完語句后,每次都會執(zhí)行final-expression。
for (var i = 0; i < 5; i++) { document.write("<br>The number is " + i); }測試看看?/?
從上面的示例中,您可以閱讀:
initialization 在循環(huán)開始之前設(shè)置變量(變量i = 0)。
condition 定義了循環(huán)運(yùn)行的條件(我必須小于5)。
每次執(zhí)行循環(huán)中的代碼塊時(shí),final-expression都會增加一個(gè)值(i ++)。
在下面的示例中,我們以升序循環(huán)遍歷一個(gè)數(shù)組:
var fruits = ['Apple', 'Mango', 'Banana', 'Orange']; var txt = ''; for (var i = 0; i < fruits.length; i++) { txt += fruits[i] + '<br>'; }測試看看?/?
在下面的示例中,我們以降序循環(huán)遍歷一個(gè)數(shù)組:
var fruits = ['Apple', 'Mango', 'Banana', 'Orange']; var txt = ''; for (var i = fruits.length -1; i >= 0; i--) { txt += fruits[i] + '<br>'; }測試看看?/?
for循環(huán)中的三個(gè)表達(dá)式都是可選的。例如,我們可以通過在循環(huán)外部初始化變量來編寫相同的For語句,而不需要初始化表達(dá)式。
//在循環(huán)外聲明變量 var i = 0; //初始化循環(huán) for (; i < 5; i++) { document.write(i); }測試看看?/?
在這種情況下,第一個(gè); 表示該語句是指向初始化,條件還是最終表達(dá)式,即使省略它也是必要的。
下面,我們還可以從循環(huán)中刪除條件。我們將使用一個(gè)if語句和break來告訴循環(huán)在i大于3時(shí)停止運(yùn)行,這與true條件相反。
//在循環(huán)外聲明變量 var i = 0; //省略初始化和條件 for (; ; i++) { if (i > 3) { break; } document.write(i); }測試看看?/?
注意:break如果省略該條件,則必須包含該語句,否則循環(huán)將永遠(yuǎn)無限循環(huán)運(yùn)行,并可能導(dǎo)致瀏覽器崩潰。
最后,可以通過將最終表達(dá)式放在循環(huán)末尾來將其刪除。兩個(gè)分號仍必須包含在內(nèi),否則循環(huán)將無法運(yùn)行。
//在循環(huán)外聲明變量 var i = 0; //省略所有表達(dá)式 for (; ;) { if (i > 3) { break; } document.write(i); i++; }測試看看?/?
從上面的示例可以看出,包括所有這三個(gè)語句通常會產(chǎn)生最簡潔易讀的代碼。但是,知道以后可以省略語句是很有用的。
您可以嵌套循環(huán),即在另一個(gè)循環(huán)內(nèi)循環(huán)。
嵌套循環(huán)在矩陣乘法中的大多數(shù)地方都使用,顯示表格和許多其他地方:
var txt = ""; for (var row = 0; row < 10; row++) { for (var col = 0; col < row; col++) { txt += " * "; } txt += "<br>"; }測試看看?/?
for...in循環(huán)迭代的對象的屬性。
為了演示,我們將創(chuàng)建一個(gè)簡單的myObj對象,其中包含一些name:value對。
var myObj = { name: "VISHAL", age: 22, height: 175, city: "New Delhi", getNothing: function () {return "";} }; for (let x in myObj) { document.write(x); }測試看看?/?
在每次迭代中,將來自對象的一個(gè)屬性分配給x,并且此循環(huán)一直進(jìn)行到對象的所有屬性用盡為止。
以下示例實(shí)現(xiàn)一個(gè)for...in循環(huán)并打印Web瀏覽器的Navigator對象:
for (let x in navigator) { document.write(x); }測試看看?/?
for...of語句創(chuàng)建一個(gè)循環(huán)遍歷可迭代對象,包括:內(nèi)置String,Array,類似Array的對象和用戶定義的可迭代對象。
let iterable = [10, 20, 30, 40, 50]; for (let x of iterable) { document.write(x); }測試看看?/?
在每次迭代中,將來自對象的一個(gè)元素分配給x,并且此循環(huán)持續(xù)進(jìn)行到對象的所有元素用盡為止。
無論for...in和for...of循環(huán)迭代的東西。它們之間的主要區(qū)別在于它們迭代的內(nèi)容:
for...in循環(huán)迭代的對象的枚舉的屬性,以任意的順序
for...of循環(huán)迭代數(shù)據(jù),該迭代的對象定義要遍歷
在while環(huán)路和do...while環(huán)路將在下一章來解釋。