循环语句
- 意义: 帮助我们去执行 重复的 代码
- 定义: 根据给出的某些条件, 重复执行一段代码,所有循环语句都是基于某一个条件去重复的执行某一段代码,如果 条件不成立, 直接结束循环
- 要素:
- 初始化
- 条件判断
- 要执行的代码
- 改变自身(改变初始化的内容)
while 循环
-
语法: while (条件) {满足条件时执行的代码}
-
需求: 想让
console.log(1)这个代码 执行 1000 次
var num = 0 // 1. 初始化
while (num < 10) { // 2. 小括号内的是 条件判断
console.log(1) // 3. 要执行的代码
num++ // 4. 改变自身
}
- 改变条件进行输出
var num = 0
while (num < 1000) {
console.log(1)
}
/**
* 第一次执行 num === 0
* 此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
* console.log(1)
*
* 第二次执行 num === 0
* 此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
* console.log(1)
*
* 第三次执行 num === 0
* 此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
* console.log(1)
*
* 第四次执行 num === 0
* 此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
* console.log(1)
*
*
* 永无止尽...
*/
- 练习 求1-100之间的所有数字加的和
var num = 1
var sum = 0
while(num <= 100){
sum = sum + num
num++
}
console.log(sum)
-
补充
prompt 方法 可以帮助我们获取用户输入的信息
- 注意: 不管用户输入的是什么, 接收到的类型永远是 字符串类型的
- 如果你想当作数字类型使用, 记得转换为数字!!!!!!!!
var year = prompt('请您输入一个 年份')
var month = prompt('请您输入一个 月份')
console.log('用户输入的年份: ', year)
console.log('用户输入的月份: ', month)
do...while 循环语句
-
定义: 是一个类似 while 的循环语句
-
while 与 do ... while的区别
while 循环在开始的时候, 会先判断条件是否成立 然后决定是否执行代码
do...while 循环在开始第一次的时候, 不会判断条件, 也就是说, 不管条件成功与失败, 第一次都会执行
var num = 10
while (num < 5) {
console.log(num)
num--
}
/**
* 第一次执行
* num === 10
* while 执行的条件是 num < 5
* 目前 num 不小于 5 所以条件不成立, 那么循环立即停止, 不会执行
*/
var num = 10
do {
// 要执行的代码
console.log(num)
num--
} while (num < 5)
//do...while 循环的时候, 第一次的时候 不会管这个条件是否成立, 他一定会执行一次
// 第一次执行 (忽略条件, 直接执行代码)
// num === 10
// 因为第一次执行不需要判断条件, 所以直接执行代码
// console.log(num) -> 10
// num-- 后续使用 num 的时候, num 的值就已经发生变化了, 自减1
// 判断条件: num < 5 才能进行下一轮循环
// 此时 num 的值 是 10, 不满足条件, 所以循环到此结束
for循环
-
语法: for(1.初始值;2.条件;3.改变自身;){4.循环自身要执行的代码}
-
目前 for 循环的使用场景来看, 要稍微多一点, 但不代表 可以完全替代 while 循环或者 do...while循环
-
练习
var num = 0
while(num < 3){
console.log(num)
num++
}
for(var num = 0; num < 3; num++){
console.log(num)
}
//1-100的和
var sum = 0; //写在外部
for(var num = 1;num <= 100; num++ ){
sum+=num;
}
console.log(sum)
//1-100偶数的和
var sum = 0;
for(var i = 1; i <= 100; i++){
if(i % 2 === 0){
sum+=i
}
}
console.log(sum)
//练习:求出1000-2022之间的所有的闰年,输出在页面
/**
* 核心
* 1. 求出 1000~2022 之间所有的数字
* 2. 求出 这个区间内 所有的 闰年
* 闰年条件1: 4年一闰, 百年不闰
* 2: 400年补一闰
*/
for(var i = 1000; i <= 2022;i++){
if(i % 4 ===0 && i % 100 !=0||i % 400 === 0){
console.log(i,'是闰年')
}
}
- 求水仙花数 三次自幂数
// 1. 找出所有的 三位数
for (var i = 100; i <= 999; i++) {
// 2. 根据 水仙花数的规则, 找出符合条件的数字
/**
* 2.1 先计算各个位置上的数字的值是什么, 也就是想办法拿到个位 十位 百位 的值
*
* 就拿 123 来举例子
* 我们应该拿到 百位上的 1 十位上的 2 个位上的 3
*
*
* 拿到百位数 先缩小100倍, 然后用 parseInt 忽略掉小数点后的数字, 就只留下 百位上的数字了
*
* 拿到十位数 先缩小10倍, 然后取余10, 得到的数字 通过parseInt取整后, 就只留下 十位上的数字
* parseInt(123 / 10 % 10) 123 / 10 % 10 -> 12.3 % 10 -> 2.3 parseInt(2.3) -> 2
* parseInt(123 / 10) % 10 -> parserInt(12.3) % 10 -> 12 % 10 -> 2
*
*
* 拿到个位数 直接取余10, 就能拿到各位上的数字
* 123 % 10 -> 3
* 156 % 10 -> 6
* 197 % 10 -> 7
*
* parseint( 123 % 100 / 10) -> parseint( 23 / 10 ) -> parseint(2.3) -> 2
* parseint( 543 % 100 / 10) -> parseInt( 43 / 10 ) -> parseInt( 4.3 ) -> 4
*/
var baiW = parseInt(i / 100)
var shiW = parseInt(i / 10 % 10)
var geW = i % 10
// 2.2 计算 三个位置上的数字的 三次方的和
var sum = baiW * baiW * baiW + shiW * shiW * shiW + geW * geW * geW
// 2.3 判断 三次方的和 是否等于 自身
if (sum === i) {
console.log(i, '是一个水仙花数')
}
}
完整版
for (i = 100; i <= 999; i++) {
var baiwei = parseInt(i / 100)
var shiwei = parseInt(i / 10 % 10)
var gewei = parseInt(i % 10)
var sum = baiwei * baiwei * baiwei + gewei * gewei * gewei + shiwei * shiwei * shiwei
if (sum === i) {
console.log(i, '是一个水仙花数')
}
}
流程控制语句
- 通过两个关键字, 可以起到控制循环的一个作用, 这就是流程控制
- break (结束掉整个循环, 不管循环后边还有几轮)
- continue (跳出当前这一轮循环, 直接开始下一轮循环)
for (var i = 1; i <= 5; i++) {
console.log('我吃了一个包子')
if (i === 3) {
break // 当循环执行到 i === 3 的时候, 此时 这个 if 判断的条件成立, 开始执行内部代码, 也就是执行 break 结束整个循环
}
}
for (var i = 1; i <= 5; i++) {
if (i === 3) {
console.log('第三个包子掉地上了, 我不吃这个包子了')
continue
}
console.log('我吃了一个包子')
}
循环嵌套
- 先输出内部,然后输出外部,每次外部输出一次的时候,内部都全部输出
- 注意:外层循环的变量与内层循环的变量不要相同
for(var j = 0;j < 3;j++){
for(var i = 0;i < 3;i++){
console.log(i)
}
console.log('j的值为',j)
}
//新需求:在页面输出一个9*9方阵
for (var j = 0;j < 9;j++){ // 外层循环:控制有多少行
for(var i = 0;i < 9;i++){ //内层循环:控制一行有多少个
document.write('*')
}
document.write('<br>')
}
/*
新需求:
在页面输出一个三角形
**/
for (var j = 1;j <= 9;j++){ // 外层循环:控制有多少行
for(var i = 0;i < j;i++){ //内层循环:控制一行有多少个
document.write('*')
}
document.write('<br>')
}