写在前面:
- JavaScrip语句以分号结束
- 表达式计算出一个值,语句执行以“使某件事发生”
- “使某件事发生”的一个办法是使用有副作用的表达式,如赋值和函数调用等(可作为单独的语句,称为“表达式语句”(expression statement))
- JavaScript程序是一系列语句的集合,默认按照顺序依次执行,通过改变这种默认的执行顺序也可达到“使某件事发生”的效果
- 条件(conditional)语句
- if语句
- switch语句
- 循环(loop)语句
- while语句
- for语句
- 跳转(jump)语句
- break
- throw
- return
- 条件(conditional)语句
- 表达式语句
- 赋值、递增、递减、delete
- 函数调用
- 复合语句和空语句
- 复合语句(compound statement)
- 用花括号把多条语句括起来形成一条复合语句
- 语句块
- 结尾不需要分号
- 整齐的缩进可让代码可读性更强
- 在语句块中声明的变量不是语句块私有的
- 空语句(empty statement)
- 包含0条语句
- 如有特殊目的需要使用空语句,最好在代码中添加注释
- 复合语句(compound statement)
- 声明语句
- 作用:定义标识符(变量名和函数名)并给其赋值
- var
- 用于声明一个或多个变量
- 使用其声明的变量不可用delete删除
- 在赋初值前变量的值是undefined
- 可用作for循环、for...in循环的一部分
- 多次声明同一变量是无所谓的
- function
- 用于声明函数,其语法格式:
1 function funcname([arg1[,arg2[...,argn]]]){ 2 statement 3 }
- 花括号是必须的
- 函数声明嵌套在其他函数中时,只能出现在所嵌套函数的顶部,不可出现在如if语句、while语句中
- 函数声明与函数定义
1 function f(...) {...} //函数声明 2 var f = function(...){...} //函数定义表达式
- 两种方式都创建了新的函数对象,但函数声明中函数名是一个变量名,指向函数对象
- 函数定义中的函数出现“提前”的现象(类似变量的声明提前)
- 变量声明与函数声明
- 变量声明提前时,变量的初始化代码仍然在原来的位置
- 函数声明提前时,函数名称和函数体均提前,这意味着可以在声明一个函数之前调用它
- 和var语句一样,函数声明语句创建的变量也是无法删除的,这些变量不是只读的,变量值可以重写
- 用于声明函数,其语法格式:
- 条件语句
- if语句(略)
- if ... else 语句(略)
- if ... else if ... else语句(略)
- switch语句
1 switch(expression){ 2 case 1: 3 ... 4 break; 5 case 2: 6 ... 7 break; 8 9 ... 10 11 default: 12 ... 13 break; 14 }
- 表达式和case匹配时,是按照”===“进行比较的,并不会做任何类型转换
- 在函数中使用switch使用时,break可用return代替
- default可以放在switch语句内的任何地方
- case后跟随的最常见的是数字和字符串直接量,ES标准允许case后跟随任意的表达式
- 并不是所有的case都能匹配到,应当避免使用有副作用的case表达式,如函数调用表达式和赋值表达式
- 循环
- while
1 while(expression){ 2 ... 3 }
- 死循环:while(true){ ... }
- do...while
1 do{ 2 ... 3 }while(expression);
- for
1 for(initialize;test;increment){ 2 ...... 3 } 4 5 /*与之等价的while循环*/ 6 initialize; 7 while(test){ 8 ...... 9 increment; 10 } 11 12 //注意:在使用continue语句时,while循环和for循环并不等价
- initialize、test、increment中的任何一个都可省略,但两个分号必须写
- 死循环:for(;;){ ... }
- for ... in
1 for(variable in object){ 2 ...... 3 }
- JavaScript解释器先计算object表达式,如果为null或者undefined,跳过循环执行后面的代码;如果为一个原始值,会将这个原始值转换为与之对应的包装对象
- for...in 循环只遍历“可枚举的”(enumerable)属性
- 属性枚举的顺序
- 通常按照定义的先后顺序
- 下列情况中取决于具体的实现:
- 对象继承了可枚举属性
- 对象具有整数数组索引的属性
- 使用delete删除了对象已有的属性
- 使用Object.defineProperty()或者类似的方法改变了对象的属性
- while
- 跳转
- 标签语句
- 作为标签的标识符必须是一个JavaScript合法的标识符,不能是保留字
- 形式为:“标签名:”
- 标签的命名空间和变量或函数的命名标签是不一样的,可以使用同一个标识符作为语句标签和作为变量名或函数名
- 标签语句只在它所起作用的语句内是有定义的
- 任何语句可以有多个标签
- 一个语句标签不能和它内部的语句标签重名,但在两个代码段不相互嵌套的情况下可以出现同名的语句标签
- break
- 用于退出循环和switch语句
- 可搭配标签使用
- continue
- 转而执行下一次循环
- 可搭配标签使用
- return
- 函数调用后的返回值
- 只能在函数中使用
- throw
- 异常(exception):发生某种情况或错误时产生的一个信号
- 抛出异常:用信号通知发生了错误或异常情况
- throw语句用于显示地抛出异常,通常采用Error类型和其子类型
- Error类型
- name属性:表示错误类型
- message属性:用于存放传递给构造函数的字符串
- 抛出异常时,JavaScript解释器会立即停止当前正在执行的逻辑,跳转至就近的异常处理程序(try/catch/finally语句),如果没有找到异常处理程序,异常将被当成程序错误来处理,并报告给用户
- try/catch/finally
- 捕获异常:处理这个(错误或异常情况)信号,采取手段从错误中恢复
- 标签语句
- 其他语句
- with
- 用于临时扩展作用域链
- debugger
- 用来产生一个断点
- use strict
- 对脚本和函数应用严格模式
- with
- 小结(略)