一、表达式和语句讲解
1.1 表达式
-
-
表达式会执行出一个结果,然后再参与其它程序
1.2 语句
-
语句可以理解为一个行为,如循环语句和判断语句
-
一般用;来分割语句,特殊结构(循环语句除外)
1.3 流程控制语句
-
通过一些特殊结构可以让js代码加载时,要么可以跳过一部不加载,或者可以循环加载一段代码
-
如:条件废止语句、循环语句
二、条件分支语句
2.1 if语句
-
最常用得条件分支语句
-
结构
-
-
condetion expression
:条件表达式,可以是任意的代码或者表达式,会转换为布尔类型 -
statement
: 结构体,用{}包括一行到多行语句,要执行就都执行,要不执行就都不执行 -
if:如果
-
else:否则
-
-
如果条件表达式为真true,执行结构体1,否则执行结构体2
注意事项
-
不写else,条件不成立,则直接跳过
-
结构体如果是单行的话,可以省略{}不写
-
-
建议在只有一个if没有else的时候使用
-
-
执行完if,无论走哪个分直,结束后都要继续执行if语句后面的其它语句
2.2 多分支if语句
-
语法:if······else if······else if······else
-
结构
-
注意事项
-
① 多分枝if语句中可以有多个else if语句,但是只能由一个else语句
-
② 在任意一个分支满足条件,直接执行该分支下的结构体然后跳出if语句
-
③ 因为后面的else if语句是在上一个if语句没有满足的情况下才进行判断的,所以可以化简后面else if表达式
2.3 if语句嵌套
-
在if语句的结构体里面,可以写另一组if语句
-
要满足外部if条件的时候才能执行内部嵌套的if语句
-
优点:可以简化多分支if语句,比如一些else if中共同拥有的部分
2.4 三元表达式
-
又叫三元运算符,必须由三个操作数参与的运算
-
表达式1(boolean_expression) ? 表达式2(true_value) : 表达式3(false_value)
-
true_value是表达式为真的时候会触发的
-
false_value是表达式为假的时候会触发的
-
优点
-
① 二选一的情况下,三元表达式结构更加简单
-
② 因为其式表达式参程序时必须运算出结果才能参与的,可以将二选一的结果赋值给一个变量
2.5 switch语句
-
又叫开关语句,允许一个程序求一个表达式的值,并且尝试去匹配表达式的值到一个case标签。如果匹配成功,就会执行相关的语句
-
结构
-
-
switch:表示进入一个开关语句
-
表达式:会将表达式的值去跟case后面的值进行全等匹配(===),值和数据类型也要相等
-
case:后面需要跟空格空开,匹配成功后会去执行后面所有语句(包括其它case的结构)
-
格式为:case 值:()注意要加冒号!
-
-
break:表示打断结构体,跳出程序,一般用于值匹配一个的话避免执行其它case的结构体的时候用break进行打断操作
-
default:没有case匹配的情况下,会执行default后面的语句,注意加冒号
-
注意事项
-
default可以不写,相当于if语句没有else
-
break根据需求在case后面写,避免跳楼现象,可以利用不写break进行一些特殊的案例
-
最好给case后面添加的式固定值
-
不要 1 || 3 || 5 || 7 || 8 || 10 || 12
-
这样最后的结果只会取到1
-
-
2.6 总结
-
if语句:最常用的语句,所有的判断情况都可以用这个进行书写
-
三元表达式:多用于给变量赋值根据二选一的情况
-
switch:多用于给一个表达式去匹配多种固定值可能性的情况
三、循环语句
3.1 for循环
-
for循环是一种前测试循环语句,在反复执行一段代码之前,都要先测试入口条件,如果条件为真,可以继续循环,如果条件为假,必须跳出循环不再执行
-
for循环是一种反复执行一段代码知道测试条件为假时停止
-
语法
-
-
这种解释只能涵盖for循环一部分特殊结构,不能表示所有for循环实现的情况
-
-
执行过程
-
-
-
① -> (②->③->④) * 循环次数 -> ⑤
-
(1)注意事项1
-
一定要有两个分号,即使那一部分为空,不然会导致语法错误
-
-
for循环后面的 {} 后面不用加分号
-
避免出现死循环
-
for循环第二部分不写或为true或设置不合理的话会出现死循环
-
-
③执行完之后才会执行④,③里面的代码可以任意编写
-
for嵌套for循环,必须先执行内层for循环之后才会继续外层for循环
-
循环内变量是全局变量,必须避免起相同变量名,常用 i,j,k
3.2 do while循环
-
是一种后测试循环语句,即执行完再去判断入口条件
-
结构
-
do {
结构体;
} while(条件表达式) -
先执行一次循环体,然后当条件表达式为真时可以继续循环
-
注意事项
-
如果循环需要变量参与,则必须在外面定义变量,否则会被重置
-
循环变量自加写在{}内部
-
避免出现死循环
-
至少会执行一次循环体,即使条件第一次为假
3.3 while循环
-
前测试循环语句,执行前会执行入口条件(这点跟for类似)
-
语法
-
while (条件表达式) {
循环体;
} -
条件为真,执行;条件为假,跳出循环
-
注意事项
-
跟do while类似,建议把循环内参与的变量在外部定义
-
循环变量自加在内部实现(不建议写在条件表达式)
-
3.4 for while do while循环总结
-
遇到必须执行一次先得使用do while
-
先测试入口条件得可以选择for或while
3.5 break语句
-
已经达到目的,不需要更多循环
-
可以用在for、do while、while
-
可以根据一些条件设置break位置,执行到的话立刻停止执行,跳出循环
-
可以节省代码的执行,优化代码
-
案例
-
判断1 - 50之间有没有能够被5整除的数字
for (var i = 0; i < 50; i++) {
if (i % 5 == 0) {
console.log(i)
break
}
}
注意事项
-
break只能打断自己的循环,不会对外层循环进行打断
-
终止外层循环
-
给外层循环添加上一个标签名,在内层循环的break关键字后面空格加上该标签即可
-
waiceng: for(var i = 0; i < 10; i++) {
for (var j = 0; j < 3; i++) {
if (j % 2 == 0) {
break waiceng // 打断2外层循环
}
}
} -
-
3.6 continue
-
跳过本次循环,进行下一次循环
-
不同于break的是不是直接打断该循环
案例
-
找到 1- 30 之间,输出不是5的倍数的数字
for (var i = 0; i < 30; i++) {
if (i % 5 == 0) {
continue
}
console.log(i)
}
注意事项
-
跟break相似,也只能停止本次循环,使用标签名可以对外层循环进行操作
-
标签名只有在循环之内有效,循环之外访问不到,具有块级作用域的特性
3.7 穷举思想
-
因为计算机没法智能的筛选所需要的数据
-
穷举思想:一种解决问题的方法,将所有的需要数据所在范围内所有的数据都一一列举出来,再根据规律的条件对所有数据星星筛选
制作方法
-
for循环遍历所有数据,再用if进行判断
-
案例
-
输出这个数的所有约束
-
var num = parseInt(prompt('请输入一个数字'))
for (var i = 1; i <= num; i++) {
if (num % i == 0) {
console.log(i)
}
} -
-
3.8 累加器、累乘器
-
使用变量应用在循环器里面
(1)案例1 - 累加器
-
求1 - 10之间所有数字的和
var num = 0
for (var i = 0; i <=10; i++) {
num += i
}
console.log(num) // 1 + 2 + ... + 10
(2)案例2 - 求一个数的阶乘
var num = 1
for (var i = 0; i < 10; i++) { // 求10的阶乘
num *= 10 - i
}
console.log(num)
-
累乘的初始值不能为0
3.9 综合案例 --- 水仙花
-
水仙花是一种特殊的三位数,特点是每个数位的三次方和,等于它本身
var num1 = parseInt(prompt('请输入第一个数')) var num2 = parseInt(prompt('请输入第二个数')) for (var i = num1; i <= num2; i++) { const gewei = Math.pow(Math.floor(i % 10), 3) const shiwei = Math.pow(Math.floor(i / 10 % 10), 3) const baiwei = Math.pow(Math.floor(i / 100), 3) if (gewei + shiwei + baiwei == i) { console.log(i) } }