获得徽章 9
- 做加法容易,做减法难,减法总是经历时间过滤才被认识和留存的更有价值的东西。
删了一半左右的仓库,新增了“手写系列”,这几个应该是不会废弃了,持续更新中,每段代码都会配分析和讲解,欢迎关注。github.com
评论点赞 - 【书名】《JavaScript权威指南》第七版
【笔记】跳转语句
跳转语句会导致JavaScript解释器跳转到源代码中的新位置。其中,break语句会让解释器跳转到循环末尾或跳转到其他语句。而continue语句会让解释器跳出循环体并返回循环顶部开始新一轮迭代。JavaScript允许给语句命名或加标签,这样break和continue就可以识别目标循环或其他语句的标签。
另外,return语句会让解释器从函数调用跳转回调用位置,同时提供调用返回的值。而yield语句是一种在生成器函数中间返回的语句。throw语句会抛出异常,设计用来与try/catch/finally语句共同使用,后者可以构成异常处理代码块。抛出异常是一种复杂的跳转语句:当有异常被抛出时,解释器会跳转到最近的闭合异常处理程序,可能是在同一个函数内部,也可能会上溯到函数调用栈的顶端。展开评论点赞 - 【书名】《JavaScript权威指南》第七版
【笔记】对for循环而言,三个表达式中任何一个都可以省略,只有两个分号是必需的。如果省略了test表达式,循环会永远重复执行。因此for(;;)与while(true)一样,是另一种编写无穷循环的方式。
ES6定义了一个新循环语句:for/of。这种新循环虽然使用for关键字,但它与常规for循环是完全不同的两种循环。
for/of循环专门用于可迭代对象。数组、字符串、集合和映射都是可迭代的,它们都是一组或一批元素,可以使用for/of循环来循环或迭代这些元素。
需要注意的是,数组迭代是“实时”的,即迭代过程中的变化可能影响迭代的输出。如果修改前面的代码,在循环内添加一行data.push(sum);,则会创建一个无穷循环。因为迭代永远不会触及数组的最后一个元素。
for/in循环看起来很像for/of循环,只不过of关键字换成了in。与for/of循环要求of后面必须是可迭代对象不同,for/in循环的in后面可以是任意对象。for/of循环是ES6新增的,而for/in是JavaScript从一开始就有的。
执行for/in语句时,JavaScript解释器首先求值object表达式。如果它求值为null或undefined,解释器会跳过循环并转移到下一个语句。否则,解释器会对每个可枚举的对象属性执行一次循环体。但在每次迭代前,解释器都会求值variable表达式,并将属性名字(字符串值)赋值给它。
for/in循环并不会枚举对象的所有属性,比如它不会枚举名字为符号的属性。而对于名字为字符串的属性,它只会遍历可枚举的属性。JavaScript核心定义的各种内部方法是不可枚举的。默认情况下,我们手写代码定义的所有属性和方法都是可枚举的。展开2点赞