循环有很多种类,但本质上它们都做的是同一件事:它们把一个动作重复了很多次(实际上重复的次数有可能为 0)。各种循环机制提供了不同的方法去确定循环的开始和结束。不同情况下,某一种类型循环会比其他的循环用起来更简单。
for 语句
一个 for 循环会一直重复执行,直到指定的循环条件为 false。JavaScript 的 for 循环,和 Java、C 的 for 循环,是很相似的。一个 for 语句是这个样子的:
for ([initialExpression]; [condition]; [incrementExpression])
statement
//举个简单的例子
for(int i = 0; i< 5; i++){
num++;
}
do...while 语句
do...while语句一直重复直到指定的条件求值得到假值(false),与while语句不同的是,while语句可能一次也不执行,do...while语句至少执行一次,一个 do...while 语句看起来像这样:
do
statement
while (condition);
while 语句
一个 while 语句只要指定的条件求值为真(true)就会一直执行它的语句块。一个 while
语句看起来像这样:
while (condition)
statement
label 语句
一个 label 提供了一个让你在程序中其他位置引用它的标识符。例如,你可以用 label 标识一个循环,然后使用 break
或者 continue
来指出程序是否该停止循环还是继续循环。
label 语句的语法看起来像这样:
label :
statement
举一个比较典型的例子,看完后即明白 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
break 语句
使用 break 语句来终止循环,switch
,或者是链接到 label 语句。
- 当你使用不带 label 的
break
时,它会立即终止当前所在的while
,do-while
,for
,或者switch
并把控制权交回这些结构后面的语句。 - 当你使用带 label 的
break
时,它会终止指定的带标记(label)的语句。
continue 语句
continue 语句可以用来继续执行(跳过代码块的剩余部分并进入下一循环)一个 while
、do-while
、for
,或者 label
语句。
- 当你使用不带 label 的
continue
时,它终止当前while
,do-while
,或者 for 语句到结尾的这次的循环并且继续执行下一次循环。 - 当你使用带 label 的
continue
时,它会应用被 label 标识的循环语句。
for...in 语句
for...in 语句循环一个指定的变量来循环一个对象所有可枚举的属性。JavaScript 会为每一个不同的属性执行指定的语句。
for (variable in object) {
statements
}
虽然使用 for...in 来迭代数组 Array 元素听起来很诱人,但是它返回的东西除了数字索引外,还有可能是你自定义的属性名字。
for...of 语句
for..of 语句在可迭代对象(包括Array、Map、Set、arguments 等等)上创建了一个循环,对值的每一个独特属性调用一次迭代。
for (variable of object) {
statement
}
下面的这个例子展示了 for...of
和 for...in 两种循环语句之间的区别。 for...in
循环遍历的结果是数组元素的下标,而 for...of
遍历的结果是元素的值:
let arr = [3, 5, 7];
arr.foo = "hello";
for (let i in arr) {
console.log(i); // 输出 "0", "1", "2", "foo"
}
for (let i of arr) {
console.log(i); // 输出 "3", "5", "7"
}
// 注意 for...of 的输出没有出现 "hello"
附:以上内容均为个人在MDN网站上学习JS的笔记,若有侵权,将在第一时间删除,若有错误,将在第一时间修改。