JavaScript权威指南(5)——语句

166 阅读3分钟

语句

表达式语句

  1. 赋值语句
  2. ++和--
  3. delete运算符
  4. 函数调用

复合语句和空语句

  1. 可以用逗号运算符将几个表达式连接在一起
  2. 也可以将多条语句联合,用花括号,形成一条复合语句
  3. 空语句

声明语句

  1. var——在函数体内,则是局部变量;在顶层代码中,则是全局变量
  2. var声明的变量无法用delete删除
  3. var语句的变量没有指定初始化表达式,则这个变量的值初始为undefined。变量声明语句会被提前至脚本或者函数的顶部,但初始化的操作还在原来的位置。
  4. function——定义函数
  5. 函数定义不能出现在if,while和其他任何语句中。
  6. 函数声明语句和函数定义表达式包含相同的函数名,但两者仍然不同。
    1. 函数声明语句中的函数名是一个变量名,变量指向函数对象。
    2. 函数定义语句中的函数被显式地提前到脚本或函数的顶部
    3. 函数声明语句创建的变量是无法删除的,但可以重写

条件语句

  1. if
  2. else if
  3. switch——对每个case的匹配操作是===恒等运算符,因此不会做类型转换

循环

  1. while
  2. do/while
  3. for
  4. for/in
  5. 如果for/in的循环体删除了还未枚举的属性,那么久不会再枚举到。如果循环体定义了对象的新属性,这些属性通常也不会枚举到
  6. 属性枚举的顺序——一般按照属性定义的先后顺序来枚举。以下情况,枚举的顺序取决于具体的实现:
    1. 对象继承了可枚举属性
    2. 对象具有整数数组索引的属性
    3. 使用delete删除了对象已有的属性
    4. 使用Object.defineProperty()或者类似的方法改变了对象的属性

跳转

  1. 标签语句,break和continue是JavaScript唯一可以使用语句标签的语句
   mainloop: while(token != null) {
       // Code omitted...
       continue mainloop; // Jump to the next iteration of the named loop
       // More code omitted...
   }
  1. break语句——break允许跟随一个语句标签
  2. break跳出非就近的循环体或者switch语句
   var matrix = getData(); // Get a 2D array of numbers from somewhere
   // Now sum all the numbers in the matrix.
   var sum = 0, success = false;
   // Start with a labeled statement that we can break out of if errors occur
   compute_sum: if (matrix) {
       for(var x = 0; x < matrix.length; x++) {
           var row = matrix[x];
           if (!row) break compute_sum;
               for(var y = 0; y < row.length; y++) {
               var cell = row[y];
               if (isNaN(cell)) break compute_sum;
                   sum += cell;
               }
       }
       success = true;
   }
  1. continue
  2. return
  3. throw——解释器停止当前正在执行的逻辑,跳转到就近的异常处理程序,如果没有,则会检查更高层的闭合代码块,寻找异常处理程序
  4. try/catch/finally
    1. 如果try中产生了异常,解释器会首先执行catch中的逻辑,然后执行finally。如果没有catch,则先执行finally,再向上传播
    2. 如果finally块使用了return、continue、break或者throw语句使程序发生跳转,或者通过调用了抛出异常的方法改变了程序执行流程,不管这个跳转使程序挂起还是继续执行,解释器都将其忽略

其它语句类型

  1. with——临时扩展作用域链
   with(document.forms[0]) {
       // Access form elements directly here. For example:
       name.value = "";
       address.value = "";
       email.value = "";
   }
  1. debugger
   function f(o) {
       if (o === undefined) debugger; // Temporary line for debugging purposes
   	... // The rest of the function goes here.
   }
  1. use strict——ES 5引入的指令,后续代码将会解析为严格代码

JavaScript语句小结