03月07, 2019

JS基础(3)——流程控制(1)——条件语句

所谓流程控制,主要就是用于控制整个程序的走向的。默认情况下,程序是从上往下,逐条执行,这种情况我们将其称之为顺序结构。但是并不是所有的程序都是使用顺序结构就能够完成的。在我们书写程序时往往还需要对整个程序进行分支,或者对某一段代码进行重复执行。

所以,在这一章我们就一起来看一下 JavaScript 中的流程控制语句。

本章中我们将学习如下的内容:

  • 条件语句
  • 循环语句

3-1 条件语句

条件语句,主要就是给定一个判断条件,并在程序执行过程中判断该条件是否成立,然后根据判断结果来执行不同的操作,从而改变代码的执行顺序,实现更多的功能。

一般来讲,条件语句可以分为 3 种:单分支语句,双分支语句以及多分支语句,我们一个一个来看。

3-1-1 单分支语句

单分支语句,由一个if组成,如果条件成立,则进入代码块开始执行语句,单分支语句的语法如下:

if(条件){
    // 条件为真时执行的代码
}

示例:

let age = 20;
if(age >= 18){
    console.log("你已经是成年人了");
}

如果条件不是一个布尔值,那么会被自动转换为布尔值

if(1){
    console.log("Hello");
}

if 语句里面的花括弧不是必须的,当只有一条执行语句的时候,可以不使用花括弧,但是不推荐这么做

if(true)console.log("Hello");

3-1-2 双分支语句

顾名思义,就是有两个分支线,如果 if 条件不成立,那么就会跳入到 else 语句里面,语法如下:

if(条件){
    // 条件为真时要执行的代码
}else{
    // 条件为假时要执行的代码
}

示例:

let age = 16;
if(age >= 18){
    console.log("你已经成年了");
}else{
    console.log("你还是未成年");
}

三目运算符

if...else语句的一个缩写方式,就是使用三目运算符?:

语法:条件 ? (条件为真时执行的代码) : (条件为假时执行的代码)

示例:

let age = 16;
let result = age>=18 ? "你已经成年了" : "你还是未成年";
console.log(result); // 你还是未成年

练习:使用三目运算符来找出3个数中最大的那个数

let a = 3,b = 8,c = 5;
let max = a>b ? (a>c?a:c) : (b>c?b:c);
console.log(max); // 8

3-1-3 多分支语句

多个if...else语句可以组合在一起,形成逻辑决策树:

if(条件){
    // 执行语句
}else if(条件){
    // 执行语句
}else{
    // 执行语句
}

需要注意的就是在多分支语句里面,如果进入到了某一个语句块,那么后面的条件就不会再进行判断,而是会直接跳出,多分支语句示例如下:

let readline = require("readline-sync");
console.log("请输入你的成绩:");
let score = readline.question("");
if(score > 100 || score < 0){
    console.log("成绩输入有误");
}else if(score >= 90){
    console.log("优秀");
}else if(score >= 70){
    console.log("良好");
}else if(score >= 60){
    console.log("合格");
}else{
    console.log("不合格");
}

switch 语句

有一种比多分支语句结构更加清晰的语句结构,就是 switch 语句。语法如下:

switch(条件){
    case 1:
        // 执行语句;
        break;
    case 2:
        // 执行语句;
        break;
    case 3:
        // 执行语句;
        break;
    default:
        // 执行语句;
}

示例:

let num = 2;
switch(num){
    case 1:
        console.log("the number is one");
        break;
    case 2:
        console.log("the number is two");
        break;
    default:
        console.log("neither one nor two");
}
// the number is two

这里特别需要说明的是,switch 语句中的条件和分支入口进行的是全等比较,示例如下:

let i = "2";
switch (i) {
    case 2:
        console.log('this is one');
        break;
    case "2":
        console.log('this is two');
        break;
    default:
        console.log('this is default');
}
// 打印结果为:this is two

还有一点,在 JavaScript 里面的 switch 语句中,和其他静态语言有所不同的是,case 后面的值不一定必须是常量,可以是变量甚至是表达式,只要 switch 的条件和 case 入口匹配上即可,如下:

switch(false){
    case 2 < 3:
        console.log("进入了第一个入口");
        break;
    case 6 < 3:
        console.log("进入了第二个入口");
        break;
    default:
        console.log("进入了默认入口");
}
// 进入了第二个入口

break关键字

break用于跳出某一个 case,如果不书写 break 的话,进入 case 以后会继续进入后面的case语句。break 往往存在一个误区,就是觉得这个关键字是必须要写的,但是并不是必须要写。有些时候我们故意不写break 关键字反而能给我们带来便利,例如下面的例子:

let day = 4;
switch(day){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        console.log("今天是工作日");
        break;
    case 6:
    case 7:
        console.log("今天是周末");
    default:
        console.log("输入有误");
}

这里我们希望程序在变量 day 值为 1 - 5 时输出"今天是工作日",在值为 6 和 7 的时候输出"今天是周末"。这个时候就可以通过省略break关键字来节省我们的代码量。

default关键字

default用于书写默认的条件,如果前面都不满足的话,就进入到 default 语句里面。

default 往往也会存在误区,很多人认为 default 也是必须要写的。事实上 default 也是可以省略的,我们书写 default ,只是为了对 switch 没有进入 case 语句时的情况做一种默认操作。当然,作为良好的编码习惯,应该在每一个 switch 语句里面书写上 default。

本文链接:http://www.yanhongzhi.com/post/js-basis-6.html

-- EOF --

Comments