手记

【金秋打卡】第20天for...of的用法

一、课程名称:前端工程师2022版

二、课程章节:ES6语法扩展-Iterator遍历器与for...of循环

三、课程讲师:Alex

四、课程内容

(一)for...of的基本用法

(1)认识for...of:注意,for...of循环只会遍历出那些done为false时,对应的value值

 

      const arr = [1, 2, 3];

      // 使用for of循环

      for (const item of arr) { console.log(item); }

(2)与break、continue一起使用

      const arr = [1, 2, 3];

      for (const item of arr) {

        if (item === 2) {

          // break;

          continue;

        }

        console.log(item);

      }

(3)在for...of中取得数组的索引

1)keys()得到的时索引的可遍历对象,可以遍历出索引值

      for (const key of arr.keys()) {

        console.log(key);

      }

2)values()得到的是值的可遍历对象,可以遍历出值

      // 获取索引值,但是这和直接遍历没有什么区别

      for (const value of arr.values()) {

        console.log(value);

      }

      for (const item of arr) {

        console.log(item);

      }

3)entries()得到的是索引+值组成的数组的可遍历对象 

    // 在一次for循环中同时遍历出索引和值

    for (const entries of arr.entries()) {

        console.log(entries);

      }

    // 联系解构赋值,可以直接解构出来

    for (const [index,value] of arr.entries()) {

        console.log(index,value);

      }

(二)认识可遍历

(1)什么是可遍历

只要有Symbol.iterator方法,并且这个方法可以生成可遍历对象,就是可遍历的,只要可遍历,就可以使用for...of循环来统一遍历

(2)原生可遍历的有哪些

数组、字符串、Set、Map、arguments、NodeList

//数组   

for(const item of [1,2,3]){

     console.log(item);

   }

  // 字符串

   for (const item of "hi") {

     console.log(item);

   }

 //Set

   for (const item of new Set([1, 2])) {

     console.log(item);

   }

  //NodeList

   for (const elem of document.querySelectorAll("p")) {

     console.log(elem);

     elem.style.color = "red";

   }

(3)非原生可遍历有哪些

1)一般对象

      // 一般的对象

      const person = { sex: "male", age: 18 };

      console.log(person[Symbol.iterator]()); //报错,所以不可以使用for of

      // for(const item of person){}

      // 想要遍历对象,有两种方法,一种是使用for in循环,另一种是给对象添加iterator方法

      // {next()}{value,done}

      person[Symbol.iterator] = () => {

        let index = 0;

        return {

          next() {

            index++;

            if (index === 1) {

              return {

                value: person.age,

                done: false,

              };

            } else if (index === 2) {

              return {

                value: person.sex,

                done: false,

              };

            } else {

              return {

                done: true,

              };

            }

          },

        };

      };

      for (const item of person) {

        console.log(item);

      }

2)有length和索引属性的对象

    obj[Symbol.iterator]=Array.prototype[Symbol.iterator]

五、课程心得

今天学习了for...of用法、可遍历等相关知识,对Iterator的理解进一步加深,昨天学习上的问题得到了解决,继续加油!


0人推荐
随时随地看视频
慕课网APP