JavaScript 随记(3)

18 阅读2分钟

语句

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 可以是语句或语句块。

使用场景:

在进行多重循环时,可以通过给循环代码块设置标签,在内层的循环中直接 breakcontinue 外层的循环(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 是必须的,trycatch/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 实现是否支持严格模式。