008. 分支结构
- 我们的
js代码都是顺序执行的(从上到下) - 逻辑分支就是根据我们设定好的条件来决定要不要执行某些代码
8-1 IF 条件分支结构(重点)
if 语句
-
通过一个
if语句来决定代码是否执行 -
语法:
if (条件) { 要执行的代码 } -
通过
()里面的条件是否成立来决定{}里面的代码是否执行// 条件为 true 的时候执行 {} 里面的代码 if (true) { alert('因为条件是 true,我会执行') } // 条件为 false 的时候不执行 {} 里面的代码 if (false) { alert('因为条件是 false,我不会执行') }
var sum = 210
var youhuisum
if(sum>200){
youhuisum =sum-10
//可以写多个语句
}
console.log(sum,youhuisum)//210 200
var sum = 190
var youhuisum
if(sum>200){
youhuisum =sum-10
}
console.log(sum,youhuisum)//190 undefined
if else 语句
-
通过
if条件来决定,执行哪一个{}里面的代码 -
语法:
if (条件) { 条件为 true 的时候执行 } else { 条件为 false 的时候执行 } -
两个
{}内的代码一定有一个会执行// 条件为 true 的时候,会执行 if 后面的 {} if (true) { alert('因为条件是 true,我会执行') } else { alert('因为条件是 true,我不会执行') } // 条件为 false 的时候,会执行 else 后面的 {} if (false) { alert('因为条件为 false,我不会执行') } else { alert('因为条件为 false,我会执行') }
var sum = 190
var youhuisum
if(sum>200){
youhuisum =sum-10
}else{
youhuisum =sum
}
console.log(sum,youhuisum)//190 190
if else if ... 语句
-
可以通过
if和else if来设置多个条件进行判断 -
语法:
if (条件1) { 条件1为 true 的时候执行 } else if (条件2) { 条件2为 true 的时候执行 } -
会从头开始依次判断条件
- 如果第一个条件为
true了,那么就会执行后面的{}里面的内容 - 如果第一个条件为
false,那么就会判断第二个条件,依次类推
- 如果第一个条件为
-
多个
{},只会有一个被执行,一旦有一个条件为true了,后面的就不在判断了// 第一个条件为 true,第二个条件为 false,最终会打印 “我是代码段1” if (true) { alert('我是代码段1') } else if (false) { alert('我是代码段2') } // 第一个条件为 true,第二个条件为 true,最终会打印 “我是代码段1” // 因为只要前面有一个条件满足了,就不会继续判断了 if (true) { alert('我是代码段1') } else if (true) { alert('我是代码段2') } // 第一个条件为 false,第二个条件为 true,最终会打印 “我是代码段2” // 只有前一个条件为 false 的时候才会继续向后判断 if (false) { alert('我是代码段1') } else if (true) { alert('我是代码段2') } // 第一个条件为 false,第二个条件为 false,最终什么也不会发生 // 因为当所有条件都为 false 的时候,两个 {} 里面的代码都不会执行 if (false) { alert('我是代码段1') } else if (false) { alert('我是代码段2') }
if else if … else 语句
-
和之前的
if else if ...基本一致,只不过是在所有条件都不满足的时候,执行最后else后面的{}// 第一个条件为 false,第二个条件为 false,最终会打印 “我是代码段3” // 只有前面所有的条件都不满足的时候会执行 else 后面的 {} 里面的代码 // 只要前面有一个条件满足了,那么后面的就都不会执行了 if (false) { alert('我是代码段1') } else if (false) { alert('我是代码段2') } else { alert('我是代码段3') }
var sum = 90
var youhuisum
if (sum>200) {
youhuisum =sum-10
} else if(sum>100){
youhuisum =sum-5
} else if(sum>50){
youhuisum =sum-3
} else{
youhuisum =sum
}
console.log(sum,youhuisum)//90 87
一个语句成立,下面的语句就不再执行了
8-2 SWITCH 条件分支结构(重点)
-
也是条件判断语句的一种
-
是对于某一个变量的判断
-
精准匹配
-
语法:
switch (要判断的变量) { case 情况1: 情况1要执行的代码 break case 情况2: 情况2要执行的代码 break case 情况3: 情况3要执行的代码 break default: 上述情况都不满足的时候执行的代码 }- 要判断某一个变量 等于 某一个值得时候使用
-
例子🌰: 1.订单状态
/* 订单状态码 1 未付款 2 已付款 3.已发货 4.已完成 */ var code = 3 switch (code) { case 1 : document.write("未付款") break; case 2 : document.write("已付款") break; case 3 : document.write("已发货") break; case 4 : document.write("已完成") break; default : document.write("出错了") } /* 注意: 1. === 2. 不要比较运算符 3. break;必须写 */ }
2.根据 1 ~ 12 的数字来输出一个月有多少天, 不考虑闰年
var month = 2
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
console.log("31天")
break;
case 2:
console.log("28天")
break;
case 4:
case 6:
case 9:
case 11:
console.log("30天")
break;
default:
break;
}
3.成绩的案例改写 switch
var score =76
var flagScore = parseInt(score/10)
switch (flagScore) {
case 10:
case 9:
console.log("A")
break;
case 8:
console.log("B")
break;
case 7:
console.log("C")
break;
case 6:
console.log("D")
break;
default:
console.log("E")
break;
}
009. 循环结构(重点)
- 根据某些给出的条件,重复的执行同一段代码
- 循环必须要有某些固定的内容组成
- 初始化
- 条件判断
- 要执行的代码
- 自身改变
9-1 WHILE 循环
-
while,中文叫 当…时,其实就是当条件满足时就执行代码,一旦不满足了就不执行了 -
语法
while (条件) { 满足条件就执行 } -
因为满足条件就执行,所以我们写的时候一定要注意,就是设定一个边界值,不然就一直循环下去了
// 1. 初始化条件 var num = 0; // 2. 条件判断 while (num < 10) { // 3. 要执行的代码 console.log('当前的 num 的值是 ' + num) // 4. 自身改变 num = num + 1 }- 如果没有自身改变,那么就会一直循环不停了
var n = 2;
while (n<10) {
console.log("li",n)
//自身改变,步长
n+=2
}
//死循环————一直满足
案例
//案例1: 求 1 ~ 100 所有数字的和 5050
var n = 1
var sum = 0
while (n<=100) {
// console.log(n)
sum+=n
n++
}
console.log(sum)
// 案例2: 求一个数字的阶乘 5*4*3*2*1 6*5*4*3*2*1
var n = 3
var sum = 1
while (n>0) {
// console.log(n)
sum*=n
n--
}
console.log(sum)
9-2 DO WHILE 循环
-
是一个和
while循环类似的循环 -
while会先进行条件判断,满足就执行,不满足直接就不执行了 -
但是
do while循环是,先不管条件,先执行一回,然后在开始进行条件判断 -
语法:
do { 要执行的代码 } while (条件)// 下面这个代码,条件一开始就不满足,但是依旧会执行一次 do 后面 {} 内部的代码 var num = 10 do { console.log('我执行了一次') num = num + 1 } while (num < 10)
// while(false){
// console.log("hello ")
// }
do {
console.log("hello")
} while (false)
var n = 0
do {
console.log("li",n)
n++
} while (n<10)
- 案例
- 1.1-100的和
var n = 1
var sum = 0
do {
sum+=n
n++
} while (n<=100)
console.log(sum)
- 2.不输入关不掉
//alert("111") //bom
//prompt("请输入你的名字")
do {
var res = prompt("请输入你的名字")
// console.log(res)
if (res) {
document.write(res)
}
} while (!res)
9-3 for 循环
-
和
while和do while循环都不太一样的一种循环结构 -
道理是和其他两种一样的,都是循环执行代码的
-
语法:
for (var i = 0; i < 10; i++) { 要执行的代码 }// 把初始化,条件判断,自身改变,写在了一起 for (var i = 1; i <= 10; i++) { // 这里写的是要执行的代码 console.log(i) } // 控制台会依次输出 1 ~ 10
for(var n=1;n<=10;n++){
// console.log(n)
if (n<=3) {
console.log("广告商品",n)
} else {
console.log("普通商品",n)
}
}
- 这个只是看起来不太舒服,但是用起来比较好用
- 案例
1000-2000闰年
var count = 0
for(var n=1000; n<=2000; n+=4){
if(n%400===0 || n%100!==0) {
document.write(n+" ")
// document.write("<br>")
count++
if (count%4===0) {
document.write("<br/>")
}
}
}
9-4 BREAK 终止循环
-
在循环没有进行完毕的时候,因为我设置的条件满足,提前终止循环
-
比如:我要吃五个包子,吃到三个的时候,不能在吃了,我就停止吃包子这个事情
-
要终止循环,就可以直接使用
break关键字for (var i = 1; i <= 5; i++) { // 每循环一次,吃一个包子 console.log('我吃了一个包子') // 当 i 的值为 3 的时候,条件为 true,执行 {} 里面的代码终止循环 // 循环就不会继续向下执行了,也就没有 4 和 5 了 if (i === 3) { break } }
9-5 CONTINUE 结束本次循环
-
在循环中,把循环的本次跳过去,继续执行后续的循环
-
比如:吃五个包子,到第三个的时候,第三个掉地下了,不吃了,跳过第三个,继续吃第四个和第五个
-
跳过本次循环,就可以使用
continue关键字for (var i = 1; i <= 5; i++) { // 当 i 的值为 3 的时候,执行 {} 里面的代码 // {} 里面有 continue,那么本次循环后面的代码就都不执行了 // 自动算作 i 为 3 的这一次结束了,去继续执行 i = 4 的那次循环了 if (i === 3) { console.log('这个是第三个包子,掉地下了,我不吃了') continue } console.log('我吃了一个包子') }
案例
P31 求质数
求质数
质数: 除了 1 和 自己本身 以外, 没有其他约数
3 5 7 11 13 17 ...
判断一个数字是质数的思路: 7
=> 7 % 2 不为 0
=> 7 % 3 不为 0
=> 7 % 4 不为 0
=> 7 % 5 不为 0
=> 7 % 6 不为 0
// var n =71
// var isZhiShu = true
// for(var i=2;i<=n/2;i++){
// if(n%i===0){
// isZhiShu = false
// break
// }
// console.log(i)
// }
// if(isZhiShu) {
// console.log("是")
// }else{
// console.log("不是")
// }
var n =111
for(var i=2;i<=n/2;i++){
if(n%i===0){
break
}
console.log(i)
}
if(i<=n/2) {
console.log("不是")
}else{
console.log("是")
}
// for(var i=0;i<=5;i++){
// }
// console.log(i)