js的代码默认按照先后顺序执行, 我们也可以来改变执行顺序
顺序:按照语句先后顺序依次执行
选择(分支):if、三元运算符、switch
重复(循环):while、for、do-while
分支语句
分支语句,又叫做判断语句
如果满足条件,则执行指定的代码,如果不满足,则执行另一份的代码或者什么都不执行
if分支
单分支
()内表达式结果为true,则运行{}内的代码,反之不运行
if(表达式){
代码块
}
// 示例:
if(2>1){
console.log(haha);
}
双分支
if(表达式){
代码块1 // 表达式结果为true,运行代码块1
}else{
代码块2 // 表达式结果为false,运行代码块2
}
// 示例:
if(10>5){
console.log('10大于5');
}else{
console.log('10小于5');
}
多分支
if(表达式1){
代码块1 // 表达式1为true则运行代码块1
}else if(表达式2){
代码块2 // 表达式1为false时,继续判断表达式2,为true则运行代码块2
}else{
代码块3 // 表达式结果都为false,运行代码块3
}
// 示例:
if(10>5){
console.log('10大于5');
}else if(10>8){
console.log('10大于8');
}else{
console.log('10小于5、8');
}
简写形式
当代码块中只有一句代码时,可以省略{},还可以写在判断条件的后面
if(true) console.log(1)
// 等同于
if(true){
console.log(1)
}
多分支同样如此
if(true) console.log(1)
else if(false) console.log(2)
else if(false) console.log(3)
else console.log(4)
if嵌套
if中包含另一个if语句,就是if嵌套
// 判断成绩的例子
var num = 100;
if(num <= 100 && num >= 0){
if(num > 90) console.log('优秀')
else if(num > 60) console.log('及格')
else console.log('不及格')
}else console.log('分数不在0到100内')
switch分支
switch分支和if分支功能类似,区别在于if可以判断一个范围,switch用于精确判断
1、先计算表达式值(num的所在位置)
2、判断表达式值是否全等于 case 后的值,相等则执行 : 后的语句,遇到 break 或 } 结束
3、找不到对应的case,则执行default,default可以不写
switch(num){
case 1:
// num为1时执行的语句
break;
case 2:
// num为2时执行的语句
break;
default:
// 以上都未匹配时执行的默认语句
break;
}
break:结束switch的执行
如果不加break,匹配到case后会将后面所有的代码都执行,又叫switch语句代码穿透
let num = 1;
switch(num){
case 1:
console.log(1);
case 2:
console.log(2);
default:
console.log(3);
// switch匹配到case 1,打印 1
// 没有break返回,继续向下执行,打印 2 和 3
三元表达式
三元表达式又叫三目运算符
判断一个表达式的值是否为真,为真时返回 ? 后的结果,为假时返回 : 后的结果
// 表达式 ? 值1 : 值2
let num = 5>1 ? 10 : 20;
console.log(num); // 10
三元表达式可以写多个嵌套
let bool1 = true;
let bool2 = true;
let num = bool1 ? bool2 ? 10 : 20 :30;
console.log(num); // 10
// bool1为真,返回 bool2 ? 10 : 20
// bool2为真,返回 10
循环语句
while循环
1、判断表达式结果为true,执行循环体
2、执行完毕后,再次判断表达式结果,为true继续执行
3、直到表达式结果为false,结束循环
while(表达式){
//循环体
}
let i = 0;
while(i<=5){
console.log(i);
i++;
}
// 打印 0,1,2,3,4,5
do while循环
和while循环相似,但do while是先执行一次循环体,再去判断表达式
do{
// 循环体
}while(表达式)
let i = 0;
do{
console.log(i);
i++;
}while(i<=5);
// 打印 0,1,2,3,4,5
如果表达式结果始终为true,则为死循环
所以通常需要控制表达式,让它不始终为true
// 无限打印 1
while(true){
console.log(1)
}
// 无限打印 1
do{
console.log(1)
}while(true)
for循环
1、执行表达式1
2、执行表达式2,表达式2的结果为true,则执行循环体
3、循环体执行完毕,执行表达式3,再返回第2步
for(表达式1;表达式2;表达式3){
// 循环体
}
// 表达式1:变量初始化
// 表达式2:循环条件
// 表达式3:改变循环变量
for(let i=0; i<=5; i++){
console.log(i);
}
// 打印 0,1,2,3,4,5
表达式2缺省,表示永远为真,死循环
其他表达式可以不写,并不会报错,但是两个分号必须要加,否则报错
for(;;){
console.log('1');
}
for(){ // 报错
console.log('1');
}
嵌套循环
for (a = 0; a <= 3; a++) { // 控制行数
for (b = 0; b <= a; b++) { // 控制☆个数
document.write('☆');
}
document.write('</br>'); // 每一次外层循环结束都换一行
}
// 页面输出结果:
☆
☆☆
☆☆☆
☆☆☆☆
循环控制
continue
在循环中可以添加continue关键字,用来结束本次循环,执行下一次循环
for(let i=0; i<=5; i++){
if(i === 3){ // 当i等于3时,结束本次循环,执行下一次循环
continue;
}
console.log(i);
}
// 打印 0,1,2,4,5
break
还可以使用break关键字,结束循环
for(let i=0; i<=5; i++){
if(i === 3){ // 当i等于3时,结束循环
break;
}
console.log(i);
}
// 打印 0,1,2
标识符
在嵌套循环中,可以结束指定某个循环(默认结束当前所在循环)
在循环前写上标识符+冒号,在break/continue后加上对应标识符即可
a:for(let i=0; i<=5; i++){
b:for(let j=0; j<=5; j++){
if(j === 2){
break a;
}
console.log(j);
}
}
// 打印 0,1