Javascript循环语句用于重复执行某个操作,它有多种形式。
(1)while循环
While语句包括一个循环条件,只要该条件为真,就不断循环。
while (expression) statement
while语句的循环条件是一个表达式(express),必须放在圆括号中。语句(statement)部分默认只能写一条语句,如果需要包括多条语句,必须添加大括号。
while (expression){ statement }
下面是while语句的一个例子。
var i = 0; while (i<100){ console.log('i当前为:' + i); i++; }
上面的代码将循环100次,直到i等于100为止。
(2)for循环
for语句是循环命令的另一种形式。
for(initialize; test; increment) statement // 或者 for(initialize; test; increment){ statement }
它分成三步:
初始化(initialize):确定循环的初始值,只在循环开始时执行一次;
测试(test):检查循环条件,只要为真就进行后续操作;
递增(increment):完成后续操作,然后返回上一步,再一次检查循环条件。
下面是一个循环打印数组每个元素的例子。
for (var i=0; i < arr.length; i++) { console.log(arr[i]); }
所有for循环,都可以改写成while循环。
var i = 0; while (i < arr.length) { console.log(arr[i]); i++; }
for语句表达式的三个部分(initialize,test,increment),可以省略任何一个,也可以全部省略。
for (;;){ console.log('Hello World'); }
上面代码省略了for语句表达式的三个部分,结果就导致了一个无限循环。
(3)do...while循环
do...while循环与while循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。
do statement while(expression); // 或者 do { statement } while(expression);
不管条件是否为真,do..while循环至少运行一次,这是这种结构最大的特点。另外,while语句后面的分号不能省略。
(4)break语句和continue语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。
break语句用于跳出代码块或循环。
var i = 0; while (i<100){ console.log('i当前为:' + i); i++; if (i === 10) break; }
上面代码只会执行10次循环,一旦i等于10,就会跳出循环。
continue语句用于立即终止本次循环,返回循环结构的头部,开始下一次循环。
var i = 0; while (i<100){ i++; if (i%2===0) continue; console.log('i当前为:' + i); }
上面代码只有在i为奇数时,才会输出i的值。如果i为偶数,则直接进入下一轮循环。
如果存在多重循环,不带参数的break语句和continue语句都只针对最内层循环。
(5)标签(label)
JavaScript语言允许,语句的前面有标签(label)。标签通常与break语句和continue语句配合使用,跳出特定的循环。
top: for (var i=0;i<3;i++){ for (var j=0;j<3;j++){ if (i===1 && j===1) break top; console.log("i="+i+",j="+j); } } // i=0,j=0 // i=0,j=1 // i=0,j=2 // i=1,j=0
上面代码为一个双重循环区块,加上了top标签(注意,top不用加引号)。当满足一定条件时,使用break语句加上标签名,直接跳出双层循环。如果break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
continue语句也可以与标签配合使用。
top: for (var i=0;i<3;i++){ for (var j=0;j<3;j++){ if (i===1 && j===1) continue top; console.log("i="+i+",j="+j); } } // i=0,j=0 // i=0,j=1 // i=0,j=2 // i=1,j=0 // i=2,j=0 // i=2,j=1 // i=2,j=2
上面代码在满足一定条件时,使用continue语句加上标签名,直接进入下一轮外层循环。如果continue语句后面不使用标签,则只能进入下一轮的内层循环。