zoukankan      html  css  js  c++  java
  • for...in 、for...of 、forEach 的区别

    无论是for…in还是for…of语句都是迭代一些东西。它们之间的主要区别在于它们的迭代方式

    1.for…in 语句以原始插入顺序迭代对象的可枚举属性
    2.for…of 语句遍历可迭代对象定义要迭代的数据(不包括从父类对象中继承的属性)。

    以下示例显示了与Array一起使用时,for…of循环和for…in循环之间的区别。

    //定义Object对象属性objCustom
    Object.prototype.objCustom = function() {};
    //定义Array对象属性arrCustom Array.prototype.arrCustom
    = function() {}; let iterable = [3, 5, 7]; iterable.foo = 'hello'; //for in 会继承 for (let i in iterable) { console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom" } for (let i in iterable) { if (iterable.hasOwnProperty(i)) { console.log(i); // logs 0, 1, 2, "foo" } } // for of for (let i of iterable) { console.log(i); // logs 3, 5, 7 }
    每个对象将继承objCustom属性,并且作为Array的每个对象将继承arrCustom属性,
    因为将这些属性添加到Object.prototype和Array.prototype。
    由于继承和原型链,对象iterable继承属性objCustom和arrCustom。

    for in

    for (let i in iterable) {
      console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom" 
    }

    此循环仅以原始插入顺序记录iterable 对象的可枚举属性。它不记录数组元素3, 5, 7 或hello,因为这些不是枚举属性。但是它记录了数组索引以及arrCustom和objCustom。如果你不知道为什么这些属性被迭代,array iteration and for…in中有更多解释。

    for (let i in iterable) {
      if (iterable.hasOwnProperty(i)) {
        console.log(i); // logs 0, 1, 2, "foo"
      }
    }

    这个循环类似于第一个,但是它使用hasOwnProperty() 来检查,如果找到的枚举属性是对象自己的(不是继承的)。如果是,该属性被记录。记录的属性是0, 1, 2和foo,因为它们是自身的属性(不是继承的)。属性arrCustom和objCustom不会被记录,因为它们是继承的。

    for...in不应该用于迭代一个 Array,其中索引顺序很重要。

    for of

    for (let i of iterable) {
      console.log(i); // logs 3, 5, 7 
    }

     该循环迭代并记录iterable作为可迭代对象定义的迭代值,这些是数组元素 3, 5, 7,而不是任何对象的属性。

    forEach

    forEach是ES5数组中引入的一个方法(Array​.prototype​.for​Each()),用于数组的遍历。

    var array1 = ['a', 'b', 'c'];
    
    array1.forEach(function(value,index,array) {
      console.log(value,index,array);
    });
    
    //> "a" 0 Array ["a", "b", "c"]
    //> "b" 1 Array ["a", "b", "c"]
    //> "c" 2 Array ["a", "b", "c"]

    语法:

    arr.forEach(callback[, thisArg]);

    参数

    callback
    为数组中每个元素执行的函数,该函数接收三个参数:
    currentValue
    数组中正在处理的当前元素。
    index可选
    数组中正在处理的当前元素的索引。
    array可选
    forEach() 方法正在操作的数组。
    thisArg可选
    可选参数。当执行回调函数时用作 this 的值(参考对象)。

    ---------------------
    作者:相濡以沫丶
    来源:CSDN
    原文:https://blog.csdn.net/qq_32279193/article/details/78685366
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【WF2017】Mission Improbable
    【Codeforces 837D】Round Subset
    【Codeforces 788C】The Great Mixing
    【JSOI2008】最大数
    2.1图像的数字化
    MATLAB生成随机数
    四六级准考证号忘记了如何快速查询四六级成绩?
    加密与水印结合
    如何在 PyPI安装python的软件包?
    matlab中如何定义函数
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10882098.html
Copyright © 2011-2022 走看看