语句块
语句块由一对大括号界定
1 | { |
语句块通常用于流程控制,如if
,for
,while
等
1 | while (x < 10) { |
这里x++
就是一个语句块。
重要:在es6之前,Javascript没有块作用域。在一个块中引入的变量的作用域是包含函数或脚本。
es6,使用let
和const
的变量是块作用域的。
条件判断语句
if…else语句
逻辑条件为真,用if
执行一个语句;逻辑条件为假,使用可选择的else
从句执行语句。
falsy values:
false
undefined
none
NaN
0
- 空字符串
''
1 | if (condition_1) { |
不要混淆原始布尔值true
和false
与Boolean
对象的真和假。例如:
1 | var b = new Boolean(false) |
switch语句
一个程序求一个表达式的值,尝试匹配表达式的值到一个case
标签,如果匹配成功,这个程序执行相关语句。
1 | switch (expression) { |
如果没有匹配的case
语句,找default
语句;如果没有default
语句,程序继续执行switch
语句后面的语句。
default
语句通常在switch语句最后面,不是必须。
可选的break语句
与每个case
语句相关联,保证匹配的语句执行完后跳出switch
语句。
如果break
语句被忽略,程序继续执行switch语句中的下一条语句。
异常处理语句
用throw
语句抛出一个错误,用try...catch
语句捕获处理它。
throw语句
使用throw
语句抛出一个异常(抛出一个含有值得表达式)
可以抛出任意表达式而不是某种类型的表达式。
1 | throw "Error2"; // String type |
try…catch语句
try...catch
语句标记一块待尝试的语句,并规定一个以上的响应应该有一个异常被抛出。- 如果抛出一个异常,
try...catch
语句就捕获它。 try...catch
语句有一个包含一句或多条语句的try代码块
。try...catch
语句有0个或多个catch代码块
。catch
代码块的语句会在try
代码块中抛出异常时执行。- 如果
try
代码块中的语句(或者try 代码块中调用的方法)一旦抛出了异常,那么执行流程会立即进入catch
代码块。 - 如果
try
代码块没有抛出异常,catch
代码块就会被跳过。 finally
代码块总会紧跟在try
和catch
代码块之后执行,但会在try
和catch
代码块之后的其他代码之前执行。
1 | function getMonthName(mo) { |
catch块
可以使用catch
块处理所有try
块中产生的异常
1 | catch (catchID) { |
- 捕捉块指定了一个标识符(上述语句中的catchID)来存放抛出语句指定的值;
- 可以用这个标识符来获取抛出的异常信息。
- 在插入throw块时JavaScript创建这个标识符;
- 标识符只存在于catch块的存续期间里;
- 当catch块执行完成时,标识符不再可用。
finally块
finally
块包含了在try和catch块完成后、下面接着try…catch的语句之前执行的语句。finally
块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,finally块里的语句也会执行。
如果finally
块返回一个值,该值会是整个try-catch-finally流程的返回值,不管在try和catch块中语句返回了什么,也就是finally块返回值覆盖try/catch块返回值:
1 | function f() { |
用finally
块覆盖返回值也适用于在catch块内抛出或重新抛出的异常:
1 | function f() { |
Promise
从es6开始,JavaScript增加了对Promise
对象的支持。对延时和异步操作流进行控制。
1 | function imgLoad(url) { |