语句
1、函数声明语句
-
函数声明语句像用
var
声明变量一样,会发生函数被提前的情况,而且不只是函数名提前,函数体也会被提前。从表现上来说,可以在一个函数被声明定义前调用它。 -
还有一种通过函数定义表达书创建的函数,先举个实例看看:
var fnc = function () {
return;
}
这种方式就不会出现函数被提前的情况。
2、for in 关键字
用于遍历对象的属性,数组的索引(数组算是特殊的对象形式)。
语法:
for ([variable] in [object])
[statement]
遍历出来的属性将被赋值给 variable
。
示例:
const o = { x: 1, y: 2, z: 3 }, a = [];
let i = 0;
for (a[i++] in o) /** empty */ ;
// a -> ["x", "y", "z"];
-
如果
object
是一个原始值,那么这个原始值将转换为对应的包装对象后进行遍历;如果object
不可被遍历,那么循环语句将被跳过。 -
只会遍历
object
中可枚举的属性。
3、标签语句
语法:
identifier: statement
其中,statement
可以是语句或语句块。
使用场景:
在进行多重循环时,可以通过给循环代码块设置标签,在内层的循环中直接 break
或 continue
外层的循环(break
也有可能是其它的语句块,例如 switch
等)。
示例:
outter: for (let i = 0; i < 100; i++) {
inner: for (let j = 0; j < 100; j++) {
if (i + j > 100) {
break outter;
}
}
}
4、throw 语句
语法:
throw expression
-
抛出一个错误异常,
expression
的值可以是任何类型的。 -
抛出异常后,JavaScript 代码会立刻停止执行,寻找最近的
try/catch/finally
语句对异常进行处理。如果没有找到,将会沿着词法环境和调用栈向上继续寻找,若外部也没有,则将异常报告给用户。
5、try/catch/finally 语句
try
:
-
作为异常处理机制语句,
try
是必须的,try
与catch/finally
其中之一组成完整的语句块。 -
通常将需要处理异常的代码写在
try
中。
catch
:
- 接收一个参数,捕获
try
中抛出的异常,并对此进行处理。
finally
:
-
不管
try
是否抛出异常都会执行。 -
finally
中的异常会覆盖try
抛出的异常;finally
中的return
会覆盖try
中的return
,也会覆盖catch
中的return
,即finally
中的return
优先级是最高的。 -
如果
try
中抛出异常,且没有catch
语句,且finally
中正常return
了,那么抛出的异常将被忽略。
6、严格模式
- 在严格模式中,调用的函数中的
this
值是undefined
。在非严格模式中,调用的函数中的this
值总是全局对象(在浏览器中是 Windows)。可以利用这种特性来判断 JavaScript 实现是否支持严格模式。