循环的主要目的就是为了重复执行代码。使我们的代码更高效。
在JS中,主要有三种循环语句:for循环、while循环、do…while循环。
一、for循环
1.for循环的概念:
在程序中,一组被重复执行的语句被称之为循环体,能否继续重复执行,取决于循环的终止条件。由循环体及循环的终止条件组成的语句,被称之为循环语句
2.for循环的语法结构
循环主要用于把某些代码循环若干次,通常跟计数有关系,其语法结构如下:
<script>
for (初始化变量; 条件表达式; 操作表达式) {
循环体
}
</script>
- 初始化变量——用var声明的一个普通变量,通常用于作为计数器使用
- 条件表达式——用来决定每一次循环是否继续执行就是终止的条件
- 操作表达式——每次循环最后执行的代码,经常用于计数器变量进行更新(递增或者递减)
3.for循环的代码体验:
体验1.执行相同的代码循环—打复印打印100句“你好”
<script>
//打复印打印100句“你好”
for (var i = 1; i <= 100; i++) {
console.log('你好');
}
</script>
4.for循环的执行流程:
① 首先执行里面的计数器变量vari=i.但是这句话在 for 里面只执行一次。
② 执行i<=100 来判断是否满足条件,如果满足条件就去执行循环体不满足条件退出循环。
③ 最后去执行i++, i++ 是单独写的代码递增,第一轮结束。
④ 接着去执行i<=100 ,如果满足条件就去执行循环体,不满足条件退出循环,第二轮。
5.认识断点调试:
断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行的显示错误,停下。
断点调试可以帮我们观察程序的运行过程
浏览器中按F12->sources->找到需要调试的文件->在程序的某一行设置断点
Watch:监视,通过watchi可以监视变量的值的变化,非常的常用。
F11:程序单步执行,让程序一行一行的执行,这个时候,观察wtch中变量的值的变化。
代码调试的能力非常重要,只有学会了代码调试,才能学会自己解决bug的能力。初学者不要觉得调试代码麻烦就不去调试。
5.for循环的案例说明:
(1) 案例1:让用户控制输出的次数
<script>
//体验2.让用户控制输出的次数
var num=prompt('请您输入次数')
for (let i = 1; i <= num;i++){
console.log('好好学习,天天向上');
}
</script>
(2)案例2:执行不同的代码循环
<script>
//执行不同的代码循环 因为我们有计数器变量i的存在i每次循环值都会变化
//我们想要输出1个人1~100岁
for (var i = 1; i <= 100; i++) {
console.log(`他今年${i}岁了`);
}
</script>
(3)案例3:嵌套if 语句使用
<script>
//体验4,嵌套 if 语句使用
for (i = 1; i <= 100; i++) {
if (i == 1) {
console.log('他1岁了,这是他降生的一年');
} else if (i == 18) {
console.log('他今年18岁了,他成年了');
} else if (i == 22) {
console.log('他今年22岁了,这 一年他娶妻生子了');
} else if (i == 50) {
console.log('他今年50岁了,他当爷爷了');
} else if (i == 100) {
console.log('他今年100岁了,他今年去世了');
} else {
console.log(`他今年${i}岁了`);
}
}
</script>
(4)案例4:for循环重复某些相同操作
for循环因为有了计数器的存在,我们还可以重复执行某些操作,比如做一些算术运算。
例: 求1-100之间所有整个数的累加和(结果是5050)
案例分析:
① 需要循环100次,我们需要一个计数器i
② 我们需要一个存储结果的变量sum,但是初始值一定是0
③ 核心算法:1+2+3+4…,sum=sum+i
<script>
var sum = 0; //求和的变量
for (var i = 1; i <= 100; i++) {
sum = sum + i; //可以写成sum+=i:
}
console.log(sum);
</script>
(5)案例5:求1-100之间所有数的平均值
<script>
var sum = 0; //需要一个 sum 和的变量
var average = 0; //需要一个平均值 average 变量
for (var i = 1; i <= 100; i++) {
sum += i;
}
average = sum / 100;
console.log(average);
</script>
(6)案例6: 求1-100之间所有偶数和奇数的和
<script>
var even = 0; //需要一个偶数的和变量 even
var odd = 0; //需要一个奇数的和变量 odd
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
even += i;
} else {
odd += i;
}
}
console.log(`1~100之间的偶数和是${even}`);
console.log(`1~100之间的奇数和是${odd}`);
</script>
(7)案例7: 求1-100之间所有能被3整除的数字的和
<script>
var result = 0;
for (var i = 1; i <= 100; i++) {
if (i % 3 == 0) {
result += i;
}
}
console.log(`1~100之间所有能被3整除的数字的和是${result}`);
</script>
(8)案例8:加强练习——求学生成绩
要求用户输入班级人数,之后依次输入每个学生的成绩,最后打印出该班级总的成绩以及平均成绩。
案例分析:
① 弹出输入总的班级人数num
② 依次输入学生的成绩(保存起来score ),此时我们需要用到for循环,弹出的次数跟班级总人数有关系,条件表达式ⅰ<=num
③ 进行业务处理:计算成绩。先求总成绩(sum),之后求平均成绩(average)
④ 弹出结果
<script>
var num = prompt('请输入班级的总人数'); //num 班级的总人数
var sum = 0; // 求和的变量
var average = 0; //求平均值的变量
for (var i = 1; i <= num; i++) {
var score = prompt(`请您输入第${i}个学生成绩`);
//注意:因为从 prompt 取到的值是字符串,需要转换为数字型的才能进行计算
sum += parseFloat(score);
}
average = sum / num;
alert(`班级总的成绩是:${sum}`)
alert(`班级平均分是:${average}`)
</script>
(9)案例9:在控制台上一行打印10个星星
我们采取追加字符串的方式,这样可打印到控制台上。
<script>
var str = ''
for (var i = 1; i <= 10; i++) {
str += '⭐'
}
console.log(str);
</script>
<script>
//让用户输入需要几个星星
var num = prompt('请问您需要打印几个星星')
var str = '';
for (var i = 1; i <= num; i++) {
str += '⭐'
}
console.log(str);
</script>
二、双重for 循环
1.双重for 循环的概念:
很多情况下,单层for循环并不能满足我们的需求,比如我们要打印一个5行5列的图形、打印一个倒直角三角形等,此时就可以过循环嵌套来实现。
循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,例妆如在for循环语句中,可以再嵌套一个for循环,这样的for循环语句我们称之为双重for循环。
2.双重for 循环的语法结构
<script>
for (外层初始化变量;外层条件表达式;外层操作表达式){
for (里层初始化变量;里层条件表达式;里层操作表达式){
执行语句;
}
}
</script>
- 我们可以把里面的循环看做是外层循环的语句
- 外层循环循环一次,里面的循环执行全部
3.双重for 循环的代码验证:
<script>
for (var i=1;i<=3;i++){
console.log(`这是外层循环第${i}次`);
for (var j=1;j<=3;j++){
console.log(`这是里层循环第${j}次`);
}
}
</script>
4.双重for 循环的案例说明:
(1)案例1:在控制台上五行五列打印星星
案例分析:
① 内层循环负责一行打印五个星星
② 外层负责打印五行
<script>
var str = '';
for (var i = 1; i <= 5; i++) {
for (var j = 1; j <= 5; j++) {
str += '⭐';
}
//打印完一行后换行
str += '\n'
}
console.log(str);
</script>
(2)案例2:让客户制台输出的N行N列星星
<script>
var rows = prompt('请您输入行数:');
var cols = prompt('请您输入列数:');
var str = '';
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
str += '⭐';
}
str += '\n'
}
console.log(str);
</script>
(3)案例3:打印倒三角
<script>
var str = '';
for (var i = 1; i <= 10; i++) { //打印行
for (var j = i; j <= 10; j++) { //里打印个的个数不一样, j=i
str += '⭐';
}
str += '\n'
}
console.log(str);
</script>
(4)案例4:打印正三角
<script>
var str = '';
for (var i = 1; i <= 10; i++) { //打印行
for (var j = 1; j <= i; j++) { //里打印个的个数不一样, j=i
str += '⭐';
}
str += '\n'
}
console.log(str);
</script>
(5)案例5:打印九九乘法表
案例分析
① 一共有9行,但是每行的个数不一样,因此需要用到双重for循环
② 外层的for循环控制行数ⅰ,循环9次,可以打印9行
③ 内层的for循环控制每行公式j
④ 核心算法:每一行公式的个数正好和行数一致,j<=i;
⑤ 每行打印完毕,都需要重新换一行
<script>
var str = '';
for (var i = 1; i <= 9; i++) { //打印行
for (var j = 1; j <= i; j++) { //里打印个的个数不一样, j=i
str += '⭐';
}
str += '\n'
}
console.log(str);
</script>
</script>
5、for循环总结
(1) for循环可以重复执行某些相同代码
(2) for循环可以重复执行些许不同的代码,因为我们有计数器
(3) for循环可以重复执行某些操作,比如算术运算符加法操作
(4) 随着需求增加,双重for循环可以做更多、更好看的效果
(5) 双重for循环,外层循环一次,内层for循环全部执行
(6) for循环是循环条件和数字直接相关的循环
(7) 分析要比写代码更重要,一些核心算法想不到,但是要学会,分析它执行过程
三、while循环
1.while循环的概念:
whil语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到俵达式不为真时结束循环。
2.while循环的语法结构:
<script>
//while 循环的语法结构
while (条件表达式) {
循环体
}
</script>
3. while循环的注意事项
里面应该有计数器初始化变量
里面应该有 操作表达式 完成计数器的更新防止死循环
4.while循环的代码验证
<script>
var num = 1;
while (num <= 10) {
console.log('看我循环10次,第11次就不循环了.');
num++;
}
</script>
5.while循环的执行思路:
① 先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则退出循环,执行后面代码。
② 执行循环体代码。
③ 循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为tue,则会继续纳行循环体,直到循环条件为false时,整个循环过程才会结束。
6.while循环的案例说明:
(1) 案例1:打印人的一生,从1岁到100岁
<script>
//1.打印人的一生,从1岁到100岁
var i = 1;
while (i <= 100) {
console.log(`他今年${i}岁了`);
i++;
}
</script>
(2)案例2:计算1~100之间所有整数的和
<script>
//2.计算1~100之间所有整数的和
var sum = 0;
var j = 1;
while (j <= 100) {
sum += j;
j++;
}
console.log(sum);
</script>
(3)案例3:弹出一个提示框,你爱我吗?如果输入我爱你,就提示结束,否则,一直询问。
<script>
//3.弹出一个提示框,你爱我吗?如果输入我爱你,就提示结束,否则,一直询问。
var message = prompt('你爱我吗?');
while (message !== '我爱你') {
message = prompt('你爱我吗?')
}
alert('我就知道你是爱我的,我也爱你哦);
</script>
四、Do while循环
1.Do while循环的概念
Do while语句其实是while语句的一个变体。该循环会先执行一次代码块,然后对条件表达式进行判断,如果条件为真,就会重复执行循环体,否则退出循环。
2.Do while循环的语法结构:
<script>
do {
循环体
}while (条件表达式)
</script>
3.Do while循环的执行思路:
① 先执行一次循环体代码
② 再执行条件表达式,如果结果为true,则继续执行循环体代码,如果为false,则退出循环,继续执行后面代码。
注意:先再执行循环体,再判断,我们会发现do.while循环语句至少会执行一次循环体代码
4.Do while循环的代码验证:
<script>
//代码验证
var i = 1;
do {
console.log('我是一个程序员');
i++;
} while (i <= 10)
</script>
5.Do while循环案例说明:
(1)案例1:打印人的一生,从1岁到100岁
<script>
//1.打印人的一生,从1岁到100岁
var i = 1;
do {
console.log(`他今年${i}岁了`);
i++;
} while (i <= 100);
</script>
(2)案例2:计算1~100之间所有整数的和
<script>
//2.计算1~100之间所有整数的和
var sum = 0;
var j = 1;
do {
sum += j;
j++;
} while (j <= 100);
console.log(sum);
</script>
(3)案例3:弹出一个提示框,你爱我吗?如果输入我爱你,就提示结束,否则,一直询问。
<script>
//3.弹出一个提示框,你爱我吗?如果输入我爱你,就提示结束,否则,一直询问。
do {
var message = prompt('你爱我吗?');
} while (message !== '我爱你')
alert('我就知道你是爱我的,我也爱你哦)
</script>
6、循环小结
① JS中循环有for、while、do while
② 三个循环很多情况下都可以相互替代使用
③ 如果是用来计次数,跟数字相关的,三者使用基本相同,但是我们更喜欢用fo
④ while和do.while可以做更复杂的判断条件,比for循环灵活一些
⑤ while和do..while执行顺序不一样,while先判断后执行,do.while先执行一次,再判断执行
⑥ while和do.while执行次数不一样,do.while至少会执行一次循环体,而while可能一次也不执行
⑦ 实际工作中,我们更常用f0r循环语句,它写法更简洁直观,所以这个要重点学习
五、Continue break 关键字
1.Continue关键字的概念:
Continue关键字用于立即跳出本次循环,继续下一次循环(本次循环体中continue 之后的代码会少执行一次)。
2.Continue 关键字的代码体验:
(1)不吃第三个包子
<script>
//Continue 代码体验:不吃第三个包子
for (var i = 1; i <= 5; i++) {
if (i == 3) {
continue; //只要遇见 continue 就退出本次循环直接跳到下一次循环。
}
console.log(`我正在吃第${i}个包子`);
}
</script>
(2)求1 !100之间,除了能被7整个除去之外的整个数和
<script>
//Continue 代码体验2:求1!100之间,除了能被7整个除去之外的整个数和
var sum = 0;
for (var i = 1; i <= 100; i++) {
if (i % 7 == 0) {
continue;
}
sum += i;
}
console.log(sum);
</script>
3.Break 关键字的概念:
4.Break 关键字的代码体验:
(1)不吃第三个包子
<script>
//Break 关键字的代码体验:
for (var i=1;i<=5;i++){
if(i==3){
break;
}
console.log(`我正在吃第${i} 个包子`);
}
</script>