循环目的:在实际问题中,有许多具有规律性的重复操作,因此在程序中要完成这类操作就需要重复执行某些语句。
在JS中,主要有三种类型的循环语句:
1、for循环
2、while循环
3、do...while循环
概念:在程序中,一组被重复执行的语句被称之为循环体,能否接着重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为循环语句。
语法结构:
// 初始化变量:可以理解为循环的开始值
// 条件表达式:可以理解为循环结束的条件
// 操作表达式:递增或则递减
for(初始化变量;条件表达式;操作表达式){
// 循环体
}
执行过程:
1. 初始化变量,初始化操作在整个 for 循环只会执行一次。
2. 执行条件表达式,如果为true,则执行循环体语句,否则退出循环,循环结束。
3. 执行操作表达式,此时第一轮结束。
4. 第二轮开始,直接去执行条件表达式(不再初始化变量),如果为 true ,则去执行循环体语句,否则退出循环。
5. 继续执行操作表达式,第二轮结束。
6. 后续跟第二轮一致,直至条件表达式为假,结束整个 for 循环。
案例:
// for循环可以重复相同的代码 ,比如我们要输出10句“媳妇我错了”
// 基本写法
for(var i = 1; i <= 10; i++){
console.log('媳妇我错了~');
}
// 用户输入次数
var num = prompt('请输入次数:');
for ( var i = 1 ; i <= num; i++) {
console.log('媳妇我错了~');
}
// for 循环还可以重复不同的代码,这主要是因为使用了计数器 ,计数器在每次循环过程中都会有变化。
// 例如,求输出一个人1到100岁:
// 基本写法
for (var i = 1; i <= 100; i++) {
console.log('这个人今年' + i + '岁了');
}
// for 循环还可以重复不同的代码,这主要是因为使用了计数器 ,计数器在每次循环过程中都会有变化。
// 例如,求输出一个人1到100岁:
// for 里面是可以添加其他语句的
for (var i = 1; i <= 100; i++) {
if (i == 1) {
console.log('这个人今年1岁了, 它出生了');
} else if (i == 100) {
console.log('这个人今年100岁了,它死了');
} else {
console.log('这个人今年' + i + '岁了');
}
}
概念:很多情况下,单层 for 循环并不能满足我们的需求,比如我们要打印一个 5 行 5 列的图形、打印一个倒 直角三角形等,此时就可以通过循环嵌套来实现。
循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for 循环,这样的 for 循环语句我们称之为双重for循环。
语法结构:
for (外循环初始值; 外循环条件; 外循环的操作表达式(递增递减)) {// 外层循环
for (里循环初始值; 里循环条件; 里循环的操作表达式(递增递减)) { // 里层循环
// 循环体
}
}
1.内层循环可以看做外层循环的语句
2.内层循环执行的顺序也要遵循 for 循环的执行顺序
3.外层循环执行一次,内层循环要执行全部次数
案例:
// 打印五行五列星星
var star = ''; // 定义空变量,来接收打印的星星
for (var i = 0; i <= 5; i++) {
for (var j = 0; j <= 5; j++) {
star += '*';
}
star += '\n'; // 每打印一行就在后面加上换行
}
console.log(star); // 最后打印整体
// 要求用户输入行数和列数,之后在控制台打印出用户输入行数和列数的星星。
var row = prompt('请输入行'); // 接收行
var col = prompt('请输入列'); // 接收列
var star = ''; // 定义空变量
for (var i = 0; i < row; i++) {
for (var j = 0; j < col; j++) {
star += '*';
}
star += '\n'; // 每循环完一次在后面加上换行
}
console.log(star); // 打印整体
// 打印正三角
var star = '';
for (var i = 0; i < 10; i++) {
for (var j = 0; j < i; j++) {
star += '*';
}
star += '\n';
}
console.log(star);
// 打印倒三角
var star = '';
for (var i = 0; i < 10; i++) {
// 外层循环每循环一次i加一,可以直接作为内层循环的初始值,达到每一次外层循环内层循环减少一颗星星的效果
for (var j = i; j < 10; j++) {
star += '*';
}
star += '\n';
}
console.log(star);
// 打印九九乘法表
// 核心算法:每一行和每一列正好一致
var star = '';
for (var i = 1; i <= 9; i++) { // 控制行数(9行)
for (var j = 1; j <= i; j++) { // 控制列数 列数和当次循环是一样的,j <= i;
star += j + '×' + i + '=' + i * j + '\t';
}
star += '\n';
}
console.log(star);
九九乘法表打印结果:
for循环小结:
for 循环可以重复执行某些相同代码
for 循环可以重复执行些许不同的代码,因为我们有计数器
for 循环可以重复执行某些操作,比如算术运算符加法操作
随着需求增加,双重for循环可以做更多、更好看的效果
双重 for 循环,外层循环一次,内层 for 循环全部执行
for 循环是循环条件和数字直接相关的循环
分析要比写代码更重要
一些核心算法想不到,但是要学会,分析它执行过程
举一反三,自己经常总结,做一些相似的案例
概念:while 语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。 while语句的语法结构如下:
语法结构:
while (条件表达式) {
// 循环体代码
}
// 执行过程:先执行条件表达式,条件表达式成立则执行循环体代码,否则不执行,执行后面代码
注意:使用while循环时一定要有退出循环条件,否则会导致死循环。
与for循环的不同点:while循环可以做比较复杂的条件判断,比如判断用户名和密码。
案例:
// 打印人的一生
var i = 1;
while (i <= 100) {
console.log('今年' + i + '岁了');
i++; // 每循环一次i加一,否则会导致死循环
}
// 计算 1 ~ 100 之间所有整数的和
var sum = 0;
var j = 0;
while (j <= 100) {
sum += j;
j++;
}
console.log(sum);
// 弹出一个提示框,你爱我吗?如果输入我爱你,就提示结束,否则,一直询问。
var message = prompt('你爱我吗?');
while (message !== '我爱你') { // 当不是输入我爱你,就会一直循环。
message = prompt('你爱我吗?')
}
// 当输入我爱你,则执行下面语句
alert('我也爱你啊');
概念:do... while 语句其实是 while 语句的一个变体,先执行一次循环,再判断,判断为true则接着循环,否则执行下面语句。
语法结构:
do {
// 循环体代码 - 条件表达式为 true 时重复执行循环体代码
} while(条件表达式);
特点:至少会执行一次。
案例:
// 打印人的一生
var i = 1;
do {
console.log('今年' + i + '岁了');
i++;
} while (i <= 100);
// 计算 1 ~ 100 之间所有整数的和
var i = 1;
var sum = 0;
do {
sum += i;
i++;
} while (i <= 100);
console.log(sum);
// 弹出一个提示框, 你爱我吗? 如果输入我爱你,就提示结束,否则,一直询问。
do {
var message = prompt('你爱我吗?');
} while (message !== '我爱你');
alert('我也爱你啊');
循环小结:
JS循环中有for、while、do while
三个循环很多情况下都可以相互替代使用
如果是用来计次数,跟数字相关的,三者使用基本相同,但是我们更喜欢用 for
while 和 do…while 可以做更复杂的判断条件,比 for 循环灵活一些
while 和 do…while 执行顺序不一样,while 先判断后执行,do…while 先执行一次,再判断执行 while 和 do…while 执行次数不一样,do…while 至少会执行一次循环体, 而 while 可能一次也不执行
实际工作中,我们更常用for 循环语句,它写法更简洁直观, 所以这个要重点学习
continue关键字用于立即跳出本次循环,接着下一次循环
案例:吃5个包子,第3个有虫子,就扔掉第3个,继续吃第4个第5个包子,其代码实现如下:
// 吃5个包子,第3个有虫子,就扔掉第3个,继续吃第4个第5个包子,其代码实现如下:
for (var i = 1; i <= 5; i++) {
if (i === 3) {
console.log('第' + i + '个包子有虫子,扔掉');
continue; // 跳出当前循环
}
console.log('正在吃' + i + '个包子');
}
break关键字用于立即跳出整个循环(循环结束)。
案例:吃5个包子,吃到第3个发现里面有半个虫子,其余的不吃了,其代码实现如下:
// 吃5个包子,吃到第3个发现里面有半个虫子,其余的不吃了,其代码实现如下:
for (var i = 1; i <= 5; i++) {
if (i === 3) { // 当i等于三,跳出循环
console.log('这是第' + i + '个包子,坏掉了不吃了');
break;
}
console.log('我在吃第' + i + '个包子');
}