流程控制
es6 代码块
一切用大括号括起来的 js 代码语句。
javascript
{
//代码块,熟人打招呼
console.log("hello!")
console.log("nice to meet you!")
}
{
//代码块,陌生人打招呼
console.log("who are you!")
}
if
语句
代码都是有一定完整的功能逻辑的,代码的执行过程中代码会选择性的执行。我们要对流程进行控制
javascript
let isDD = true
if (isDD) {
console.log("DD斩首")
} else {
console.log("保护起来")
}
//流程控制的时候需要逻辑翻译,如果高兴...否则...
其中,if 括号里的表达式结果会被强制转换为true
/false
,
第一个代码块是结果为真所执行的代码,第二个代码块是结果为假执行的代码
其中else{}
可以不写。如果代码块只有一条语句可以不写大括号,但是不推荐
三目运算符
相当于 if else 语句的简写。
javascript
// 语法: expression ? sentence1 : sentence2
true ? 2 : 3 //2
let words = test("sw") ? "good" : "not" + "good"
switch
语句
如果某个判断比较复杂,比如数目的多少或者范围,不是简单的真假,用 switch case
javascript
let sex = getSex("犬山哥") //返回这个人的性别
switch (
sex //对sex判断
) {
case "男": //如果不满足就寻找下一个case
console.log("左转")
break //后续的case不需要进行判断了
case "女":
console.log("右转")
break
default: //以上都不满足的执行
console.log("秀吉")
}
for
语句
通常用于控制循环次数的循环方法
javascript
for (let i = 0; i < 10; i++) {
console.log(`我是第${i}次执行的`)
}
/*其中,for(A;B;D){
C;
}
A: 循环开始前的初始化操作
B: 循环的结束条件判断,如果是真,则继续循环,如果是假则退出循环
D: 单次循环完成之后的状态叠加或者改变
C: 可以填写若干条被循环的代码
*/
注意:
- 按 ABCD 顺序执行
- B 条件写错可能会死循环(浏览器未响应)
javascript
let i = 5
for (; i < 10;) {
console.log(i)
i = i + 1
} //合法代码,但是不推荐
对于可迭代对象的遍历:for...in
javascript
let arr = [1, 2, 3, 5]
for (let i in arr) {
console.log(i)
}
//挨个打印对象每个属性的键名(字符串) '0' '1' '2' '3'
let obj = {
a: 1,
b: 2,
}
for (let i in obj) {
console.log(i)
}
//挨个打印对象每个属性的键名:a b
//但是对于类数组如document.querySelectorAll("div")
//遍历会打印对象本身及其原型链上的属性,所以不建议用
实现了迭代器接口(数组类数组字符串)则可以使用for...of
javascript
let arr = [1, 2, 3, 5]
for (let i of arr) {
console.log(i) //1, 2, 3, 5
}
for (let i of "asd") {
console.log(i) //"a" "s" "d"
}
while
语句
和 for 循环的本质是一样的,但是没有循环开始的初始化操作和循环的状态的改变。
javascript
while (isNotDeadLine()) {
struggle("一下")
} //如果截至日期还没到,挣扎一下。完事了再来
/* while(A){
* B;
* }
* 其中:
* A: 每次循环开始前的判断
* B: 循环的若干代码
*/
while
可以转换成for
循环
do while
语句
同 while
唯一区别是判断和循环交换顺序
javascript
do {
struggle("一下下")
} while (isNotDeadLine())
//先挣扎一下,再看看还可不可以有时间在挣扎一次,可以就再来
/*其中 do{
* B;
* } while(A);
* B: 循环的若干代码
* A: 每次循环结束后判断
*/
continue
/break
关键字
continue;
跳出此次循环,此次循环后续的代码不需要执行,下次循环依旧执行
javascript
for (let i = 0; i < 5; i++) {
console.log(i)
if (i == 3) continue
console.log(i)
} // 0 0 1 1 2 2 3 4 4
其中:for
循环前面可以添加循环名(标签),通过continue 循环名
的方式跳过指定循环体
javascript
forA: for (let i = 0; i < 10; i++) {
if (i == 3) continue forA
forB: for (let j = 0; j < 10; j++) {
if (j == 5) continue forB
console.log(i, j)
}
} //i=4不会打印且j=5不会打印
break
和continue
类似,但是不是跳过此次循环,而是结束当前循环
javascript
for (let i = 0; i < 5; i++) {
console.log(i)
if (i == 3) break
console.log(i)
} // 0 0 1 1 2 2 3
同continue
可以添加循环名(标签)
javascript
forA: for (let i = 0; i < 10; i++) {
if (i == 3) break forA
forB: for (let j = 0; j < 10; j++) {
if (j == 5) break forB
console.log(i, j)
}
} //i>=4不会打印且j>=5不会打印
异常捕获
程序在运行时出错 ,可以被捕获并接着运行。
javascript
try {
// 可能出现异常的代码
} catch (e) {
// 出现异常以后执行的代码
// e:exception,用来捕获异常的信息
}
抛出异常 归档在 24-生成器和Promise
篇
练习题
- 做一个 99 乘法表,注意换行
- 计算 n 的阶乘 n!的结果
- 打印出所有的 "水仙花数 "。
所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如:153 是一个 "水仙花数 ",因为 153 等于 1^3 + 5^3 + 3^3。 - 5 文钱可以买一只公鸡,3 文钱可以买一只母鸡,1 文钱可以买 3 只雏鸡。
现在用 100 文钱买 100 只鸡,那么各有公鸡、母鸡、雏鸡多少只?
请编写程序实现。