语句
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 实现是否支持严格模式。