【ECMAScript系列 8.0】 : 流程控制语句

174 阅读4分钟

流程控制语句

1.基本概念

  • 默认情况下,浏览器会按书写从上至下顺序执行程序中的每一行代码,但是这并不能满足我们所有的开发需求
  • 为了方便我们控制程序的运行流程,JS提供了顺序结构、选择结构(if/switch)、循环结构(while/for)三种语句

2.if语句

(1).条件判断语句

  • 当条件表达式为真的时候就会执行{}中所有的代码, 并且只会执行一次
if(条件表达式){
    条件为真时执行语句;
}

let age = 19;
if(age >= 18){
	console.log('开网卡');
}
console.log('卖饮料');
// 开网卡  卖饮料

(2).条件分支语句

if(条件表达式){
    条件为真时执行语句;
}else{
    条件为假时执行语句;
}

if(条件表达式1){
    条件1为真时执行语句;
}else if(条件表达式2){
    条件为1不满足时执行语句;
}else if(条件表达式3){
    条件12不满足时执行语句;
}else{
    条件123都不满足时执行语句;
}

(3).注意点

  • 对于非布尔类型的数据, 会先转换成布尔类型再判断
if(null){
    console.log('a');
}
console.log('b');
// b
  • 对于== /===判断, 将常量写在前面(避免写成赋值 = 而出错)
let num = 10;
if(5 == num){
    console.log('a');
}
  • if / else if / else后面的大括号都可以省略, 但是省略之后只有紧随其后的语句受到控制
if(false)
    console.log('a');
    console.log('b');  // b
  • 在JavaScript中分号(;)也是一条语句(空语句)
if(false);
{
	console.log('a');
	console.log('b');
}
// a b
  • if选择结构可以嵌套使用
if(true){
	if(false){
		console.log('a');
	}else{
		console.log('b');
	}
}else{
	if(false){
		console.log('c');
	}else{
		console.log('d');
	}
}
  • 当if选择结构省略大括号时, else if/else会自动和距离最近没有被使用的if匹配
if(0)
	if(1)
		console.log('a');
	else
		console.log('b');
else
	if(1)
		console.log('c');
	else
		console.log('d');
// c
在企业开发中, 如果条件满足之后只有一句代码需要执行, 那么就使用三元运算符
在企业开发中, 如果条件满足之后有多句代码需要执行, 那么就使用选择结构

let num = prompt('请输入');
num % 2 === 0 ? alert('yes') : alert('no');

if(num % 2 === 0){
	alert('yes');
	num = 666;
}else{
	alert('no');
	num = 123;
}
console.log(num);

3.switch语句

switch(表达式){
    case 表达式1:
    	语句1;
    	break;
    case 表达式2:
    	语句2;
    	break;
    ......
    default:
    	前面所有case都不匹配执行的代码;
    	break;
}
  • 会从上至下的依次判断每一个case是否和()中表达式的结果相等, 如果相等就执行对应case后面的代码, 如果前面所有的case都不匹配, 那么就会执行default后面的代码

  • 所有的case和default只有一个会被执行, 并且只会被执行一次

  • 注意点:

    • case判断的是=== , 而不是 ==
    let num = 123;
    switch (num){
    	case'123':
    		console.log('字符串123');
    		break;
    	case 123:
    		console.log('数值123');
    		beak;
    	default:
    		console.log('other');
    		break;
    }
    // 数值123
    
    • ()中可以是常量也可以是变量还可以是表达式
    // let num = 123;
    // switch (num) { // 变量
    // switch (123) { // 常量
    switch (122 + 1) { // 表达式
        case 123:
            console.log("数值的123");
            break;
        default:
            console.log("Other");
            break;
    }
    
    • case后面可以是常量也可以是变量还可以是表达式
    let num = 123;
    switch (123) {
        // case 123: // 常量
        // case num: // 变量
        case 100 + 23: // 变量
            console.log("数值的123");
            break;
        default:
            console.log("Other");
            break;
    }
    
    • break的作用是立即结束整个switch语句,在switch语句中一旦case或者default被匹配, 那么其它的case和default都会失效
    let num = 1;
    switch (num) {
        case 1:
            console.log("1");
            break;
        case 2:
            console.log("2");
            break;
        default:
            console.log("Other");
            break;
    }
    
    • default不一定要写在最后,switch中的default无论放到什么位置, 都会等到所有case都不匹配再执行
    let num = 7;
    switch (num) {
        // default:
        //     console.log("Other");
        //     break;
        case 1:
            console.log("1");
            break;
        default:
            console.log("Other");
            break;
        case 2:
            console.log("2");
            break;
    }
    
    • 和if/else中的else一样, default也可以省略
    let num = 7;
    switch (num) {
        case 1:
            console.log("1");
            break;
        case 2:
            console.log("2");
            break;
    }
    

if和switch如何选择

  • 在企业开发中如果是对区间进行判断, 那么建议使用 if
  • 在企业开发中如果是对几个固定的值的判断, 那么建议使用 switch
  • 原则: 能用 if 就用 if
需求: 要求判断一个数是否是大于100的数

let num = 20;
if(num > 100){
	alert('大于100的数');
}else{
	alert('不大于100的数');
}