JavaScript的循环结构
2.2 循环嵌套
①.语法
// 嵌套循环:循环内部包裹其他的循环
// 外侧循环执行一次,内部循环执行一轮
// 实例
for (var i = 0; i < 5; i++) {
for (var j = 0; j < 10; j++) {
console.log('我爱你')
}
}
②.案例
<script>
// 1.打印矩形 每次只能打印一颗*
for (var i = 0; i < 5; i++) {
for (var j = 0; j < 5; j++) {
document.write('*');
}
document.write('<br>');
}
// 2.打印直角三角形
// *
// **
// ***
// ****
// *****
// 打印图片 外层控制行,内层控制列
for (var i = 0; i < 5; i++) {
for (var j = 0; j < i + 1; j++) {
document.write('*');
}
document.write('<br>')
}
// 3.打印乘法口诀表
// 表格做法:
document.write('<table><tbody>');
// 行
for (var i = 1; i <= 9; i++) {
//每列
document.write("<tr>");
for (var j = 1; j <= i; j++) {
document.write('<td>' + j + '*' + i + '=' + i * j + '</td>');
}
document.write('</tr>');
// document.write('<br>');
}
document.write('</tbody></table>');
// 空格做法
// 行
for (var i = 1; i <= 9; i++) {
// 列
for (var j = 1; j <= i; j++) {
// i * j = ij
document.write(j + '*' + i + '=' + i * j + ' ');
}
document.write('<br>');
}
</script>
③.提升案例
<script>
// 输出1 - 100之间所有的素数(质数)(只能被1和自身整除的数, 但是1不是质数)
// 方法1 标志位思想
var flag = true;
for (var i = 1; i <= 100; i++) {
for (var j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
// 不是质数
break;
}
}
if (flag && i != 1) {
console.log(i);
}
flag = true;
}
// 方法2 计数器思想
var num = 0;
for (var i = 1; i <= 100; i++) {
for (var j = 1; j <= i; j++) {
if (i % j == 0) {
num++;
}
}
// 判断能被整除两次的是质数
if (num == 2) {
console.log(i);
}
// 重置num
num = 0;
}
// 方法3
for (var i = 1; i <= 100; i++) {
for (var j = 1; j <= i; j++) {
if (i % j == 0) {
break;
}
if (i == j + 1) {
console.log(i);
}
}
if (i == 2) {
console.log(i);
}
}
// 打印一个等腰三角形
// *
// ***
// *****
// *******
// *********
// 行
for (var i = 1; i <= 5; i++) {
for (var j = 1; j <= 5 - i; j++) {
document.write(' ');
}
for (var k = 1; k <= 2 * i - 1; k++) {
document.write('*');
}
document.write('<br>');
}
</script>
2.3 for循环非一般情况和死循环
①.for循环非一般情况
// for循环非一般写法
var i = 0
for (; i < 5;) {
console.log('我爱你');
i++;
}
for循环结束关键看条件表达式结果为真为假
②.死循环
// 简写
// 简写不能省略;
for (; true;);
for (; ;);
2.4 while循环
①.语法
var i = 0;
while (一般是条件表达式,结果是布尔值) {
循环体;
自增自减表达式;
}
②.执行流程
// 执行流程
// 1.首次执行
// 1-1 先执行初始化语句
// 1-2 执行条件表达式
// 条件为真,执行循环体,执行自增自减表达式
// 条件为假,跳出while循环
// 2.非首次执行
// 2-1 执行条件表达式
// 条件为真,执行循环体,执行自增自减表达式
// 条件为假,跳出while循环
③. for循环和while循环的适用场景
- for循环适合有明显循环次数的情况
- while循环适合有一个明确的结束条件的情况
2.5 do while循环
①.语法
var i = 0;
do {
循环体
自增自减表达式
} while(一般是条件表达式,结果是布尔值);
②.执行流程
// 执行过程
// 1. 执行初始化表达式
// 2. 执行循环体和自增自减表达式
// 3. 执行条件表达式
// 结果为真,继续执行循环体
// 结果为假,跳出循环
③.while和do while的区别
- while 是先判断条件,后选择是否执行
- do while 是先执行一遍循环体,再去判断条件
- do while 保证了循环体至少被执行一次
2.6关键字continue
①.continue作用
- 作用:在循环体中,结束本次循环,继续执行下一次循环
②.continue案例
// 打印1~100以内所有的能整除3的数字
for (var i = 1; i <= 100; i++) {
if (!(i % 3 == 0)) {
continue;
}
// console.log(i);
}
// 当if分支语句中只有一行语句时,可以省略大括号
for (var i = 1; i <= 100; i++) {
if (!(i % 3 == 0))
continue;
console.log(i);
2.7 关键字break
①.break作用
- 在 switch case 中表示跳出switch分支语句
- 在 循环中表示跳出最近的一层循环
②.break案例
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i == 1) {
break;
}
console.log(j, 'j');
}
console.log(i, 'i');
}