《JavaScript权威指南》第5章 语句

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