循ç¯ä¸è¿ä»£
å¾ªç¯æä¾äºä¸ç§å¿«éåç®åçæ¹å¼å»åä¸äºéå¤çäºãJavaScript å ¥é¨çè¿ä¸ªç« èä¼ä»ç»å¨ JavaScript ä¸åå¨åªäºä¸åçè¿ä»£è¯å¥ã
ä½ å¯ä»¥æå¾ªç¯æ³æä¸ç§è®¡ç®æºåçæ¸¸æï¼åè¯æäººå¨ä¸ä¸ªæ¹åä¸èµ° X æ¥ï¼ç¶åå¨å¦ä¸ä¸ªæ¹åä¸èµ° Y æ¥ï¼ä¾å¦ï¼âåä¸èµ° 5 æ¥âå¯ä»¥ç¨ä¸ä¸ªå¾ªç¯æ¥è¿æ ·è¡¨è¾¾ï¼
for (let step = 0; step < 5; step++) {
// è¿è¡ 5 次ï¼step å¼ä» 0 å° 4ã
console.log("åä¸èµ°ä¸æ¥");
}
å¾ªç¯æå¾å¤ç§ç±»ï¼ä½æ¬è´¨ä¸å®ä»¬é½åçæ¯åä¸ä»¶äºï¼å®ä»¬æä¸ä¸ªå¨ä½éå¤äºå¾å¤æ¬¡ï¼å®é ä¸éå¤çæ¬¡æ°æå¯è½ä¸º 0ï¼ãåç§å¾ªç¯æºå¶æä¾äºä¸åçæ¹æ³å»ç¡®å®å¾ªç¯çå¼å§åç»æãä¸åæ åµä¸ï¼æä¸ç§ç±»å循ç¯ä¼æ¯å ¶ä»ç循ç¯ç¨èµ·æ¥æ´ç®åã
JavaScript 䏿ä¾äºè¿äºå¾ªç¯è¯å¥ï¼
for è¯å¥
ä¸ä¸ª for 循ç¯ä¼ä¸ç´é夿§è¡ï¼ç´å°æå®çå¾ªç¯æ¡ä»¶ä¸º falseãJavaScript ç for 循ç¯ï¼å JavaãC ç for 循ç¯ï¼æ¯å¾ç¸ä¼¼çãä¸ä¸ª for è¯å¥æ¯è¿ä¸ªæ ·åçï¼
for (initialization; condition; afterthought)
statement
å½ä¸ä¸ª for å¾ªç¯æ§è¡çæ¶åï¼ä¼åç以ä¸è¿ç¨ï¼
- 妿æåå§å表达å¼
initializationï¼å®å°è¢«æ§è¡ãè¿ä¸ªè¡¨è¾¾å¼é常ä¼åå§åä¸ä¸ªæå¤ä¸ªå¾ªç¯è®¡æ°å¨ï¼ä½è¯æ³ä¸æ¯å 许ä¸ä¸ªä»»æå¤æåº¦ç表达å¼çãè¿ä¸ªè¡¨è¾¾å¼ä¹å¯ä»¥å£°æåéã - 计ç®
condition表达å¼çå¼ã妿conditionç弿¯ trueï¼å¾ªç¯ä¸çè¯å¥ä¼è¢«æ§è¡ã妿conditionç弿¯ falseï¼for循ç¯ç»æ¢ã妿conditionè¡¨è¾¾å¼æ´ä¸ªé½è¢«çç¥æäºï¼condition çå¼ä¼è¢«è®¤ä¸ºæ¯ trueã - 循ç¯ä¸ç
statement被æ§è¡ã妿éè¦æ§è¡å¤æ¡è¯å¥ï¼å¯ä»¥ä½¿ç¨åï¼{ ... }ï¼æ¥å 裹è¿äºè¯å¥ã - å¦æææ´æ°è¡¨è¾¾å¼
afterthoughtï¼æ§è¡æ´æ°è¡¨è¾¾å¼ã - åå°æ¥éª¤ 2ã
示ä¾
ä¸é¢ç彿°å
å«ä¸ä¸ªå«æ for 循ç¯å»è®¡ç®ä¸ä¸ªæ»å¨å表ä¸è¢«éä¸é¡¹ç®ç个æ°ï¼ä¸ä¸ª <select> å
ç´ å
è®¸éæ©å¤é¡¹ï¼ãfor 循ç¯å£°æäºåé i å¹¶å°å®çåå§å¼è®¾ä¸º 0ã宿£æ¥ i æ¯å¦æ¯ <select> å
ç´ ä¸çé项æ°éå°ï¼æ§è¡äºéåç if è¯å¥ï¼ç¶å卿¯æ¬¡å®æå¾ªç¯åï¼i çå¼å¢å 1ã
HTML
<form name="selectForm">
<label for="musicTypes">éæ©ä¸äºé³ä¹ç±»åï¼ç¶åç¹å»ä¸é¢çæé®ï¼</label>
<select id="musicTypes" name="musicTypes" multiple="multiple">
<option selected="selected">R&B</option>
<option>çµå£«</option>
<option>å¸é²æ¯</option>
<option>æ°çºªå
</option>
<option>å¤å
¸</option>
<option>æå§</option>
</select>
<button id="btn" type="button">éæ©äºå¤å°ä¸ªé项ï¼</button>
</form>
JavaScript
è¿éï¼for è¯å¥å£°æäºåé i å¹¶å°å®çåå§å¼è®¾ä¸º 0ã宿£æ¥ i æ¯å¦æ¯ <select> å
ç´ ä¸çé项æ°éå°ï¼æ§è¡äºéåç if è¯å¥ï¼ç¶å卿¯æ¬¡å®æå¾ªç¯åï¼i çå¼å¢å 1ã
function countSelected(selectObject) {
let numberSelected = 0;
for (let i = 0; i < selectObject.options.length; i++) {
if (selectObject.options[i].selected) {
numberSelected++;
}
}
return numberSelected;
}
const btn = document.getElementById("btn");
btn.addEventListener("click", () => {
const musicTypes = document.selectForm.musicTypes;
console.log(`ä½ éæ©äº ${countSelected(musicTypes)} 个é项ã`);
});
do...while è¯å¥
do...while è¯å¥ä¸ç´éå¤ç´å°æå®çæ¡ä»¶æ±å¼å¾å°åå¼ï¼falseï¼ã
do...while è¯å¥çèµ·æ¥åè¿æ ·ï¼
do
statement
while (condition);
statement 卿£æ¥æ¡ä»¶ä¹å伿§è¡ä¸æ¬¡ãè¦æ§è¡å¤æ¡è¯å¥ï¼è¯å¥åï¼ï¼è¦ä½¿ç¨åè¯å¥ï¼{ ... }ï¼å
æ¬èµ·æ¥ã妿 condition 为çï¼trueï¼ï¼statement å°å次æ§è¡ã卿¯ä¸ªæ§è¡çç»å°¾ä¼è¿è¡æ¡ä»¶çæ£æ¥ãå½ condition 为åï¼falseï¼ï¼æ§è¡ä¼åæ¢å¹¶ä¸ææ§å¶æäº¤åç» do...while åé¢çè¯å¥ã
示ä¾
å¨ä¸é¢çä¾åä¸ï¼è¿ä¸ª do 循ç¯å°è³å°éå¤ä¸æ¬¡ï¼å¹¶ä¸ä¸ç´éå¤ç´å° i ä¸åå°äº 5ã
let i = 0;
do {
i += 1;
console.log(i);
} while (i < 5);
while è¯å¥
ä¸ä¸ª while è¯å¥åªè¦æå®çæ¡ä»¶æ±å¼ä¸ºçï¼trueï¼å°±ä¼ä¸ç´æ§è¡å®çè¯å¥åãwhile è¯å¥çèµ·æ¥åè¿æ ·ï¼
while (condition)
statement
妿è¿ä¸ªæ¡ä»¶å为åï¼å¾ªç¯éç statement å°ä¼åæ¢æ§è¡å¹¶ææ§å¶æäº¤åç» while è¯å¥åé¢ç代ç ã
æ¡ä»¶æ£æµä¼å¨æ¯æ¬¡ statement æ§è¡ä¹ååçã妿æ¡ä»¶è¿å为çï¼ statement ä¼è¢«æ§è¡å¹¶ç´§æ¥ç忬¡æµè¯æ¡ä»¶ã妿æ¡ä»¶è¿å为åï¼æ§è¡å°åæ¢å¹¶ææ§å¶æäº¤åç» while åé¢çè¯å¥ã
è¦æ§è¡å¤æ¡è¯å¥ï¼è¯å¥åï¼ï¼è¦ä½¿ç¨è¯å¥å ({ ... }) å
æ¬èµ·æ¥ã
ç¤ºä¾ 1
åªè¦ n å°äº 3ï¼ä¸é¢ç while 循ç¯å°±ä¼ä¸ç´æ§è¡ï¼
let n = 0;
let x = 0;
while (n < 3) {
n++;
x += n;
}
卿¯æ¬¡å¾ªç¯éï¼ n ä¼å¢å 1ï¼å¹¶è¢«å å° x ä¸ãæä»¥ï¼x å n çå忝ï¼
- ç¬¬ä¸æ¬¡å®æåï¼
n= 1ï¼x= 1 - ç¬¬äºæ¬¡å®æåï¼
n= 2ï¼x= 3 - ç¬¬ä¸æ¬¡å®æåï¼
n= 3ï¼x= 6
å¨ä¸æ¬¡å®æåï¼æ¡ä»¶ n < 3 çç»æä¸å为çï¼æä»¥å¾ªç¯ç»æ¢äºã
ç¤ºä¾ 2
é¿å æ 穷循ç¯ï¼æ é循ç¯ï¼ãä¿è¯å¾ªç¯çæ¡ä»¶ç»ææç»ä¼åæåï¼å¦åï¼å¾ªç¯æ°¸è¿ä¸ä¼åæ¢ãå 为æ¡ä»¶æ°¸è¿ä¸ä¼åæåå¼ï¼ä¸é¢è¿ä¸ª while 循ç¯å°ä¼æ°¸è¿æ§è¡ï¼
// æ é循ç¯å¹¶ä¸å¥½ï¼
while (true) {
console.log("ä½ å¥½ï¼ä¸çï¼");
}
label è¯å¥
ä¸ä¸ª label æä¾äºä¸ä¸ªè®©ä½ å¨ç¨åºä¸å
¶ä»ä½ç½®å¼ç¨å®çæ è¯ç¬¦ãä¾å¦ï¼ä½ å¯ä»¥ç¨ label æ è¯ä¸ä¸ªå¾ªç¯ï¼ç¶åä½¿ç¨ break æè
continue æ¥æåºç¨åºæ¯å¦è¯¥åæ¢å¾ªç¯è¿æ¯ç»§ç»å¾ªç¯ã
label è¯å¥çè¯æ³çèµ·æ¥åè¿æ ·ï¼
label:
statement
label çå¼å¯ä»¥æ¯ä»»ä½çéä¿çåç JavaScript æ è¯ç¬¦ï¼ statement å¯ä»¥æ¯ä»»æä½ æ³è¦æ è¯çè¯å¥ï¼åï¼ã
示ä¾
å¨è¿ä¸ªä¾åéï¼æ è®° markLoop æ è¯äºä¸ä¸ª while 循ç¯ã
markLoop: while (theMark == true) {
doSomething();
}
举ä¸ä¸ªæ¯è¾å ¸åçä¾åï¼çå®åå³æç½ Label çåºç¨ï¼
æªæ·»å Labelï¼
var num = 0;
for (var i = 0; i < 10; i++) {
// i 循ç¯
for (var j = 0; j < 10; j++) {
// j 循ç¯
if (i == 5 && j == 5) {
break; // i = 5ï¼j = 5 æ¶ï¼ä¼è·³åº j 循ç¯
} // ä½ i 循ç¯ä¼ç»§ç»æ§è¡ï¼çäºè·³åºä¹ååç»§ç»æ§è¡æ´å¤æ¬¡ j 循ç¯
num++;
}
}
alert(num); // è¾åº 95
æ·»å Label åï¼
var num = 0;
outPoint: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outPoint; // å¨ i = 5ï¼j = 5 æ¶ï¼è·³åºææå¾ªç¯ï¼
// è¿åå°æ´ä¸ª outPoint 䏿¹ï¼ç»§ç»æ§è¡
}
num++;
}
}
alert(num); // è¾åº 55
ä½¿ç¨ continue è¯å¥ï¼åå¯è¾¾å°ä¸æªæ·»å label ç¸åçææï¼ä½å¨è¿ç§æå¤å±å¾ªç¯çæ åµä¸ï¼å¾ªç¯çè·³åºè¿å ¥æµç¨æ´ä¸ºææ°ä¸äºï¼
var num = 0;
outPoint: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outPoint;
}
num++;
}
}
alert(num); // 95
ä» alert(num) çå¼å¯ä»¥çåºï¼continue outPoint; è¯å¥çä½ç¨æ¯è·³åºå½å循ç¯ï¼å¹¶è·³è½¬å° outPointï¼æ ç¾ï¼ä¸ç for 循ç¯ç»§ç»æ§è¡ã
break è¯å¥
ä½¿ç¨ break è¯å¥æ¥ç»æ¢å¾ªç¯ï¼switchï¼æè
æ¯é¾æ¥å° label è¯å¥ã
- å½ä½ 使ç¨ä¸å¸¦ label ç
breakæ¶ï¼å®ä¼ç«å³ç»æ¢å½åæå¨çwhileï¼do-whileï¼forï¼æèswitchå¹¶ææ§å¶æäº¤åè¿äºç»æåé¢çè¯å¥ã - å½ä½ 使ç¨å¸¦ label ç
breakæ¶ï¼å®ä¼ç»æ¢æå®ç带æ è®°ï¼labelï¼çè¯å¥ã
break è¯å¥çè¯æ³çèµ·æ¥åè¿æ ·ï¼
break;
break label;
å¨è¯æ³ä¸ï¼è¢« [] å
裹çå
容æ¯å¯çç¥çï¼ä¹å°±æ¯ label å¯ä»¥çç¥ãè¥çç¥ï¼åç»æ¢å½åæå¨çå¾ªç¯æ switchï¼è¥ä¸çç¥ï¼åç»æ¢æå®ç label è¯å¥ã
ç¤ºä¾ 1
ä¸é¢çä¾åå¾ªç¯æ°ç»éçå
ç´ ï¼ç´å°æ¾å°ä¸ä¸ªçäº theValue çå¼ï¼
for (let i = 0; i < a.length; i++) {
if (a[i] === theValue) {
break;
}
}
ç¤ºä¾ 2ï¼ç»æ¢ä¸ä¸ª label
let x = 0;
let z = 0;
labelCancelLoops: while (true) {
console.log("å¤å¾ªç¯ï¼" + x);
x += 1;
z = 1;
while (true) {
console.log("å
循ç¯ï¼" + z);
z += 1;
if (z === 10 && x === 10) {
break labelCancelLoops;
} else if (z === 10) {
break;
}
}
}
continue è¯å¥
continue è¯å¥å¯ä»¥ç¨æ¥ç»§ç»æ§è¡ï¼è·³è¿ä»£ç åçå©ä½é¨åå¹¶è¿å
¥ä¸ä¸å¾ªç¯ï¼ä¸ä¸ª whileãdo-whileãforï¼æè
label è¯å¥ã
- å½ä½ 使ç¨ä¸å¸¦ label ç
continueæ¶ï¼å®ç»æ¢å½åwhileï¼do-whileï¼æè for è¯å¥å°ç»å°¾çè¿æ¬¡ç循ç¯å¹¶ä¸ç»§ç»æ§è¡ä¸ä¸æ¬¡å¾ªç¯ã - å½ä½ 使ç¨å¸¦ label ç
continueæ¶ï¼å®ä¼åºç¨è¢« label æ è¯ç循ç¯è¯å¥ã
continue è¯å¥çè¯æ³çèµ·æ¥åè¿æ ·ï¼
continue;
continue label;
ç¤ºä¾ 1
以ä¸ç¤ºä¾å±ç¤ºäºä¸ä¸ª while 循ç¯ï¼å
¶ä¸å½ i çå¼ä¸º 3 æ¶æ§è¡ continue è¯å¥ãå æ¤ï¼n çå¼å嫿¯ 1ã3ã7 å 12ã
let i = 0;
let n = 0;
while (i < 5) {
i++;
if (i === 3) {
continue;
}
n += i;
console.log(n);
}
// è¾åºï¼
// 1 3 7 12
ç¤ºä¾ 2
ä¸ä¸ªè¢«æ ç¾ä¸º checkIandJ çè¯å¥å
å«äºä¸ä¸ªæ ç¾ä¸º checkJ çè¯å¥ã妿éå° continue è¯å¥ï¼ç¨åºä¼ç»æå½å checkJ çè¿ä»£å¹¶å¼å§ä¸ä¸è½®çè¿ä»£ãæ¯æ¬¡éå° continue è¯å¥æ¶ï¼checkJ è¯å¥ä¼ä¸ç´é夿§è¡ï¼ç´å° checkJ è¯å¥çæ¡ä»¶ä¸º falseãå½è¿å false åï¼å°ä¼æ§è¡ checkIandJ çå©ä½è¯å¥ï¼checkIandJ ä¼ä¸ç´æ§è¡ï¼ç´å°å
¶æ¡ä»¶ä¸º falseãå½è¿åå¼ä¸º false æ¶ï¼å°ä¼æ§è¡ checkIandJ çä¸é¢çè¯å¥ã
妿 continue æä¸ä¸ªæ è®° checkIandJï¼ç¨åºå°ä¼ä» checkIandJ è¯å¥åçé¡¶é¨ç»§ç»æ§è¡ã
let i = 0;
let j = 10;
checkIandJ: while (i < 4) {
console.log(i);
i += 1;
checkJ: while (j > 4) {
console.log(j);
j -= 1;
if (j % 2 === 0) {
continue;
}
console.log(j, "æ¯å¥æ°ã");
}
console.log("i =", i);
console.log("j =", j);
}
for...in è¯å¥
for...in è¯å¥å¾ªç¯ä¸ä¸ªæå®çåéæ¥å¾ªç¯ä¸ä¸ªå¯¹è±¡ææå¯æä¸¾ç屿§ãJavaScript ä¼ä¸ºæ¯ä¸ä¸ªä¸åç屿§æ§è¡æå®çè¯å¥ã
for (variable in object) {
statements
}
示ä¾
ä¸é¢ç彿°éè¿å®çåæ°å¾å°ä¸ä¸ªå¯¹è±¡åè¿ä¸ªå¯¹è±¡çååãç¶å循ç¯è¿ä¸ªå¯¹è±¡çææå±æ§å¹¶ä¸è¿åä¸ä¸ªååºå±æ§ååè¯¥å±æ§å¼çå符串ã
function dumpProps(obj, objName) {
let result = "";
for (const i in obj) {
result += `${objName}.${i} = ${obj[i]}<br>`;
}
result += "<hr>";
return result;
}
对äºä¸ä¸ªæ¥æ make å model 屿§ç car 对象æ¥è¯´ï¼æ§è¡ç»æ result æ¯ï¼
car.make = Ford car.model = Mustang
æ°ç»
è½ç¶ä½¿ç¨ for...in æ¥è¿ä»£æ°ç» Array å
ç´ å¬èµ·æ¥å¾è¯±äººï¼ä½æ¯å®è¿åçä¸è¥¿é¤äºæ°åç´¢å¼å¤ï¼è¿æå¯è½æ¯ä½ èªå®ä¹ç屿§ååãå æ¤è¿æ¯ç¨å¸¦ææ°åç´¢å¼çä¼ ç»ç for å¾ªç¯æ¥è¿ä»£ä¸ä¸ªæ°ç»æ¯è¾å¥½ï¼å 为ï¼å¦æä½ æ³æ¹åæ°ç»å¯¹è±¡ï¼æ¯å¦æ·»å 屿§æè
æ¹æ³ï¼for...in è¯å¥è¿ä»£çæ¯èªå®ä¹ç屿§ï¼è䏿¯æ°ç»çå
ç´ ãï¼è¯è
注ï¼ä¸é¢ç for...of è¯å¥ï¼å forEach()ï¼ä¹æ¯çæ³çéæ©ãï¼
for...of è¯å¥
for...of è¯å¥å¨å¯è¿ä»£å¯¹è±¡ï¼å
æ¬ArrayãMapãSetãarguments ççï¼ä¸å建äºä¸ä¸ªå¾ªç¯ï¼å¯¹å¼çæ¯ä¸ä¸ªç¬ç¹å±æ§è°ç¨ä¸æ¬¡è¿ä»£ã
for (variable of object) {
statement
}
ä¸é¢çè¿ä¸ªä¾åå±ç¤ºäº for...of å for...in 两ç§å¾ªç¯è¯å¥ä¹é´çåºå«ã for...in 循ç¯éåçç»ææ¯æ°ç»å
ç´ ç䏿 ï¼è for...of éåçç»ææ¯å
ç´ çå¼ï¼
const arr = [3, 5, 7];
arr.foo = "hello";
for (const i in arr) {
console.log(i); // è¾åº "0", "1", "2", "foo"
}
for (const i of arr) {
console.log(i); // è¾åº "3", "5", "7"
}
// 注æ for...of çè¾åºæ²¡æåºç° "hello"