【书名】《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核心定义的各种内部方法是不可枚举的。默认情况下,我们手写代码定义的所有属性和方法都是可枚举的。
【笔记】对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
点赞
![[憨笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_27.0006230.png)