zoukankan      html  css  js  c++  java
  • JS for..in与for..of的区别

    for…in是遍历数组、对象的key

    1.index索引为字符串型数字,不能直接进行几何运算
    2.遍历顺序有可能不是按照实际数组的内部顺序
    3.使用for in会遍历数组所有的可枚举属性,包括原型。
    4.所以for in更适合遍历对象,不要使用for in遍历数组。

    let arr = [1, 2, 3];
    for (let i in arr) {
        console.log(i)
    }
    let obj = {
        name: 'wuxiaodi',
        age: 18,
    };
    for (let i in obj) {
        console.log(i)//0  1  2 name  age
    }

    如果想用for…in遍历值那就把JS代码改成这样:

    let arr = [1, 2, 3];
    for (let i in arr) {
        console.log(arr[i])
    }
    let obj = {
        name: 'wuxiaodi',
        age: 18,
    };
    for (let i in obj) {
        console.log(obj[i])//1  2  3  wuxiaodi  18
    }

    那么除了使用for循环,如何更简单的正确的遍历数组达到我们的期望呢(即不遍历原型上的属性),ES6中的for of更胜一筹.

    记住,for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

    for of遍历的只是数组内的元素,而不包括数组的原型属性。

    for…of是遍历数组的value

    let arr = [1, 2, 3];
    for (let i of arr) {
        console.log(i)//1  2  3
    }

     总结

    • for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为对象没有迭代器.与forEach()不同的是,它可以正确响应break、continue和return语句
    • for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:
      for (var key of Object.keys(someObject)) {
        console.log(key + ": " + someObject[key]);
      }
    • 遍历map对象时适合用解构,例如;
      for (var [key, value] of phoneBookMap) {
         console.log(key + "'s phone number is: " + value);
      }
    • 当你为对象添加myObject.toString()方法后,就可以将对象转化为字符串,同样地,当你向任意对象添加myObjectSymbol.iterator方法,就可以遍历这个对象了。
    • 举个例子,假设你正在使用jQuery,尽管你非常钟情于里面的.each()方法,但你还是想让jQuery对象也支持for-of循环,你可以这样做:
      jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
    • 所有拥有Symbol.iterator的对象被称为可迭代的。可迭代对象的概念几乎贯穿于整门语言之中,不仅是for-of循环,还有Map和Set构造函数、解构赋值,以及新的展开操作符。
    • for...of的步骤
      or-of循环首先调用集合的Symbol.iterator方法,紧接着返回一个新的迭代器对象。迭代器对象可以是任意具有.next()方法的对象;for-of循环将重复调用这个方法,每次循环调用一次。举个例子,这段代码是我能想出来的最简单的迭代器:
      var zeroesForeverIterator = {
       [Symbol.iterator]: function () {
         return this;
        },
        next: function () {
        return {done: false, value: 0};
       }
      };
  • 相关阅读:
    asp.net+ tinymce粘贴word
    jsp+ tinymce粘贴word
    jsp+ ueditor word粘贴上传
    php+ ueditor word粘贴上传
    asp.net+ueditor word粘贴上传
    word写博客
    【转】如何使用离线博客发布工具发布CSDN的博客文章
    用word发布CSDN文章
    用word发CSDN blog,免去插图片的烦恼
    如何实现word上传服务器
  • 原文地址:https://www.cnblogs.com/art-poet/p/12525444.html
Copyright © 2011-2022 走看看