《JavaScript权威指南》第5章 语句
- 表达式被求值之后产生了一个值,而语句在被执行后会导致某事件执行。
- 表达式两边的圆括号是
if语句的语法必须的。
- 默认情况下
else子句属于最近的if语句。
return和break都可以终止switch语句,阻止执行流进去下一个case。
case的匹配使用的是全等操作符,即必须在没有类型转换的情况下匹配。
- 不是所有的
case表达式都会被求值,所以应避免使用包含副效应的case表达式,只写常量表达式。
for循环中只有两个分号是必需的。如果省略了test表达式,循环会永远重复执行。使用for(;;)和while(true)可以创造一个无穷循环。
- 初始化、测试和更新是对循环变量的三个关键操作。
for/of循环要求of后面必须是可迭代对象(如数组、字符串、集合、映射)。
- 对象(默认)是不可迭代的,对常规对象使用
for/of会抛出TypeError。
for/in循环的in后面可以是任意对象。
for/in循环并不会枚举对象的所有属性,如名字为符号的属性。对于名字为字符串的属性只会遍历可枚举的属性。JS核心定义的各种内部方法是不可枚举的。
- 继承的可枚举属性也会被
for/in循环枚举,所以避免意外,可以使用基于object.keys()使用for/of循环,而不是for/in循环。
for/in语句循环指定对象的属性名。 每次迭代前,解释器都会求值variable表达式,并将属性名字(字符串值)复制给它。
- 数组索引是对象的属性,可以通过
for/in循环来枚举。操作数组时,尽量用for/of而不是for/in。
break和continue是JS中唯一使用语句标签的语句。这些标签与变量和函数不在同一个命名空间中,因此同一个标识符既可以作为语句标签,也可以作为变量或函数名。
continue语句只能在循环体内使用,会让解释器跳出循环体并返回循环顶部并开始新一轮迭代。
continue语句在while和for循环中存在差异:while循环会直接返回到它的条件,for循环会先求其increment表达式,然后再返回其条件。
- 只要执行
return语句,就会返回其调用者,不管这个return语句后面是否还有其他语句。
- 只要有
try块,就必须有catch块或finally块中的一个。
- 无论
try块中发生了什么,finally块中的代码一定会执行,因此finally块经常用于执行代码清理。
- 使用
var声明的变量,其作用域为包含函数,而非包含块。
- 函数提升:位于任何JS代码块中的函数声明都会在代码运行之前被处理,在整个代码块中函数名都会绑定到相应的函数对象。因此,调用函数的代码可能位于声明函数的代码之前。
- 与函数不同,类声明不会被提升,因此在代码中不能在还没有声明类之前就使用类。
- 如果模块中只导出一个值,通常会使用特殊的
export default形式。