循环语句
1.do-while语句
概念:do-while是一个后测试循环语句,既代码会先执行一次在对退出条件进行求值.换句话说 就是 最少会执行一次
使用方法:
do {
statement
} while (expression);
使用案列:
let i = 0;
do{
i += 2;
console.log(i);
}while(i<10);
//第一次: i = 2 打印 2, 判断i<10 -->;
//第二次:i = 4 打印4, 判断i<10 -->;
//.......
//第n次: i = 10 打印10, 判断i<10 跳出循环;
2.while语句
概念:while语句是一种先测试循环语句,既先检测退出条件,再执行循环体内的代码。有可能循环体内的代码都不会执行
使用方法:
while(expression) statement
let i = 0;
while(i<10){
i += 2;
console.log(i);
}
// i = 0 判断i<10 执行循环体内的语句(i = 2, 打印 2 )
// i = 2 判断i<10 执行循环体内的语句(i = 4, 打印 4 )
//...........
//i = 10 判断i<10 判断条件不成立跳出循环
3.for语句
概念: for语句也是先测试语句,只不过增加了进入循环之后的初始化代码,以及循环执行后要执行的表达式
使用方法:
for(initialization;expression;post-loop-expression) {
statement;
}
案列:
for(let i = 0;i<10;i++){
console.log(i);
}
//第一次: 初始化:let i = 0 -> 判断条件 i<10; -> 执行循环体 ->更新条件i++ i=2;
//第二次: 判断条件 i<10; -> 执行循环体 ->更新条件i++ i=3;
//第三次: 判断条件 i<10; -> 执行循环体 ->更新条件i++ i=4;
//..........
//断点调试,加深理解
4.for循环与while循环的关系
for(let i = 0;i<10;i++){
console.log(i);
}
//等同于
let i = 0;
for(;i<10;){
console.log(i);
i++;
}
//等同于
let i = 0;
while(i<10){
console.log(i);
i++;
}
//总结;能用for循环表示的 一定能用while循环表示 for循环其实是while循环的封装
//思考? 什么情况下用while 循环 什么情况下用for循环呢?
let a = true,b = 1;
while (a) {
if (b > 9) {
a = false; //在循环体内间接计算迭代
}
console.log(b);
b ++; //在循环体内间接计算迭代
}
//建议: 能用for循环的 就不要用while循环, for循环执行效率更高
//极端案列(死循环)
for(let i = 0;;i++){ //缺少判断条件
console.log("今天夜宵吃啥?");
}
for(let i = 0;i<10;){ //缺少更新循环语句
console.log("今天夜宵吃啥?");
}
for(;;){
console.log("完犊子了!");
}
5.break 和 continue
概念:break和continue 语句为执行循环代码提供了更严格的控制手段.其中 break 语句用户立即退出循环,强制执行循环后的下一条语句。而continue 语句也用于立即退出循环,但会再次再次从循环顶部开始执行.
//break的基础使用
for(let i = 0;i<10;i++){
console.log(i);
if(i % 5 == 0){
break;
}
}
//continue的基础使用
for(let i = 0;i<10;i++){
console.log(i);
if(i % 5 == 0){
continue;
}
}
难度升级
6.双层for循环
概念:双层for循环一般来遍历二维数组, 第一层循环是层数,第二层循环是列数
案列:打印五行五列的星星
let str = "";
for(let i = 0;i<5;i++){ //外层循环控制行数
for(let j = 0;j<5;j++){ //内层循环控制列数
str += "★";
}
str += "\n";
}
//break的局限性
//要求 num等于55的时候 跳出循环
let num = 0;
label:
for(let i = 0;i<10;i++){
for(let j = 0;j<10;j++){
if(i == 5 && j == 5){
break label;
}
num++;
}
}
//内循环 使用break 只能结束内存循环....
//借助标记语句 可以让break 跳出多层循环, 主要用于实现复杂的业务逻辑, 但是容易出错. 嵌套层级不宜过多
console.log(num);
案列: 打印倒三角形
let str = "";
for(let i = 1;i<10;i++){
for(let j = i;j<10;j++){
str += "★";
}
str += "\n";
}
console.log(str);
案列:打印等腰三角形
//打印等腰三角形
let str = "";
for(let i = 0;i<6;i++){
for(let j = i;j<5;j++){
str += " ";
}
for(let k = 0;k<i;k++){
str += "★";
}
str += "\n";
}
console.log(str);
作业:
打印九九乘法表
//打印九九乘法表
let str = "";
for(let i = 1;i<9;i++){
for(let j = 1;j<=i;j++){
str += j+"*"+i+"="+i*j+"\t";
}
str += "\n";
}
console.log(str);