控制流程和异常处理

块语句

js中最基本的语句是块语句,所谓块语句即用一对大括号括起来的若干语句

{
    statement1;
    statement2;
    statement3;
    ...
    statementN;
}

块语句通常和控制语句一起使用,所谓控制语句即if语句、while语句以及for语句

while (i < 10) {
    console.log(i++);
}

在上面这个例子中{ console.log(i++); }就是一个块语句。请注意,var关键字声明的变量不是块范围的,它只能声明局部范围或者全局范围。

var x = 10;

if (true) {
    var x = 20;
}

console.log(x); // 控制台输出20

如果要声明块范围的变量,可以使用let关键字

let x = 10;

{
    let x = 20;
}

console.log(x); // 控制台输出10

const关键字也可以用来声明块范围的常量,这点不做过多赘述

条件语句

js支持两种条件语句,一种是if...else语句,另一种是switch语句

if…else语句

像下面这种语句就是if...else语句

if (条件) {
    // 块1
    语句1;
} else {
    // 块2
    语句2;
}

条件可以是变量,也可以是字面量,甚至可以是表达式。如果条件为true,则执行块1中的语句;否则,执行块2中的语句。每个块中都可以有多条语句

请注意,在js中,除undefined、none、空串(“”)、0、NaN外,其他的值被当作条件时都与true等价。而上述5个值则与false等价

if (0) {
    console.log("这是一个true值");
} else {
    console.log("这是一个false值");
}

if...else语句还有一种形式,即if...else if... else,这种形式通常用来按顺序测试多个条件,请注意它在遇到第一个满足条件的情况后执行完其后的语句,就不会再测试剩余的条件,而是会执行条件语句之后的语句。

if (条件1) {
    语句1;
} else if (条件2) {
    语句2} else if (条件3) {
    语句3;
} else {
    语句4;
}

如果条件1为true,则执行语句1;否则测试条件2,如果条件2为true,则执行语句2;否则测试条件3,如果条件3为true,则执行语句3。如果都不满足,则行语句4。以此类推,最后的else语句块可以省略。另外,条件语句是可以嵌套的,比如下面这个例子

if (条件1) {
    if (条件2) {
     	语句1;   
    } else {
        语句2;
    }
}

如果条件1为真,则对条件2进行判断,如果条件2为真,则执行语句1;否则执行语句2

switch语句

一个switch语句如下所示

switch (表达式) {
    case 标签1:
        语句1;
        break;
    case 标签2:
        语句2;
        break;
    default:
        语句3;
}

switch语句会根据表达式的值去匹配case后面的标签,匹配到立即执行;如果一直没有找到,则会执行default后面的语句。遇到break就立即跳出switch语句,执行switch语句后面的语句。

expression = 1;
switch (expression) {
    case 1:
        console.log(1);
        break;
    case 2:
        console.log(2);
        break;
    default:
        console.log("default");
}

上面这个例子会在控制台输出1。

请注意,break和default并不是必须的,而是根据可选,在没有break的情况下,switch语句会一直向下执行,直到遇到break语句或者switch语句结束

expression = 1;
switch (expression) {
    case 1:
        console.log(1); // 在控制台输出1
    case 2:
        console.log(2); // 在控制台输出2
    default:
        console.log("default"); // 在控制台输出default
}

上面这个例子每个case和default后面的语句都会执行

异常处理语句

throw语句

使用throw语句可以抛出异常

throw expression;

expression可以是任意类型的值,比如下面这个例子

throw 1;
throw 2;
throw "我是个bug"

通常我们使用throw语句抛出异常对象

throw new Error("我是个异常");

try…catch语句

使用throw语句可以抛出异常,那么该怎么处理异常呢?我们通常使用try...catch语句

try {
    语句;
} catch (err) {
  处理语句;
}

使用try将要抛出异常的语句块包裹起来,使用catch语句来定义处理异常的方式。当try块中有语句发生异常时,就会执行catch块中的语句;当try块中没发生异常时,catch块中的语句不会执行。catch后面的括号里面的变量你可以起任何名字,只要符合规范,它是一个Error对象,有name和message属性,name属性是异常对象的名字,message属性封装了异常的描述信息,你可以这样抛出异常

try {
    throw new Error("我是个Bug")
} catch (e) {
    console.log(e.name); // Error
    console.log(e.message); // 我是个bug
}

try...catch语句还有个可选部分,即finally语句

try {
    语句;
} catch (err) {
  处理语句;
} finally {
    语句;
}

finally块中的语句无论try块中的语句是否发生异常都会执行

try {
    console.log("你好");
} catch (error) {
    console.log(error.name);
} finally {
    console.log("没有异常,让我们喝杯咖啡放松一下");
}

无论如何,finally中的语句都会执行。

你也可以省略catch块

try {
    console.log("你好");
} finally {
    console.log("没有异常,让我们喝杯咖啡放松一下");
}

这样也是可以的,但请注意,finally语句会覆盖返回结果或者抛出的异常,也就是说,抛出的异常或者返回值最终以finally为准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值