目录:

块语句 Block statement

最基本的语句就是块语句,由一堆尖括号包围。

注意 var 声明变量不是块范围的,而是函数或脚本范围的。也就是说,块代码里面对块语句外面用var定义的变量进行再赋值,会改变外部的var变量的值。

这跟java 就不同了,java的块语句中的变量是局部变量,不会影响到外面。

条件语句 Conditional statements

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

if…else 语句

如果逻辑条件为 true,则使用 if 语句执行语句。如果条件为 false,则使用可选的 else 子句执行语句。

虚假值 Falsy values

下面的值都会被当作 false:

  • false
  • undefined
  • null
  • 0
  • NaN
  • 空字符串(""

所有其他的值,包括所有的对象,当传递到条件语句中时,都会被计算成 true

注意一点:千万不要搞混淆了基本类型boolean值 true 和false 与 Boolean 对象的 true 和false 值

const b = new Boolean(false);
if (b) {
  // this condition evaluates to true
}
if (b == true) {
  // this condition evaluates to false
}

switch 语句

代码结构如下:

switch (expression) {
  case label1:
    statements1;
    break;
  case label2:
    statements2;
    break;
  // …
  default:
    statementsDefault;
}

break的坑

因为break是一个可选项,所以如果在写switch的case语句时,少了break关键字,那么将会逐个执行case语句,直到碰到break或者default,执行完才会跳出switch语句。

异常处理语句Exception handling statements

可以使用 throw 语句抛出异常,并且使用 try…catch 语句捕获它们。

异常类型

抛出具有指定目的的异常通常是更高效的方式。

异常类型参考:

throw 语句

语法:throw expression

可以抛出任何类型的异常,示例:

throw "Error2"; // String type
throw 42; // Number type
throw true; // Boolean type
throw {
  toString() {
    return "I'm an object!";
  },
};

try…catch 语句

try 用于包裹着可能产生异常的语句,catch用来执行在捕获到异常之后该如何处理的语句。

换句话说就是希望try语句块能成功,如果不能成功,那么将控制权交给catch语句块。

注意,在打印 catch 语句块的日志信息时,使用 console.error() 有助于调试。

示例:

try {
  throw "myException"; // generates an exception
} catch (err) {
  // statements to handle any exceptions
  logMyErrors(err); // pass exception object to error handler
}
// 注意这里的catch语句括号的值,不需要像Java一样声明类型

finally 语句块

finally 语句块中包含了将在try…catch 语句块执行之后执行的语句。此外,finally 语句块又在 try…catch…finally 后面的语句之前执行。

finally 语句块不管异常是否发生都会执行。这个功能可以使得finally很适合处理当一些脚本占用了资源需要释放时使用。

示例代码:

openMyFile();
try {
  writeMyFile(theData); // This may throw an error
} catch (e) {
  handleError(e); // If an error occurred, handle it
} finally {
  closeMyFile(); // Always close the resource
}

注意:如果 finally 语句块中有return一个值,那么这个值将变成整个 try…catch…finally 语句块的返回值,而不管try或catch语句块中的任何return返回值结果。

利用Error对象 Utilizing Error objects

可以使用 Error 对象的 name 和 message 属性获取更精准的错误信息。

示例:

function doSomethingErrorProne() {
  if (ourCodeMakesAMistake()) {
    throw new Error("The message");
  } else {
    doSomethingToGetAJavaScriptError();
  }
}

try {
  doSomethingErrorProne();
} catch (e) {
  // Now, we actually use `console.error()`
  console.error(e.name); // 'Error'
  console.error(e.message); // 'The message', or a JavaScript error message
}