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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    HDU 5273 Dylans loves sequence 暴力递推
    HDU 5285 wyh2000 and pupil 判二分图+贪心
    HDU 5281 Senior's Gun 贪心
    HDU 5651 xiaoxin juju needs help 逆元
    HDU 5646 DZY Loves Partition
    HDU 5366 The mook jong
    HDU 5391Z ball in Tina Town 数论
    HDU 5418 Victor and World 允许多次经过的TSP
    HDU 5642 King's Order dp
    抽屉原理
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10882098.html
Copyright © 2011-2022 走看看