zoukankan      html  css  js  c++  java
  • Javascript数组Array的forEach方法

    Javascript数组Array的forEach扩展方法 forEach是最常用到的数组扩展方法之一,相当于参数化循环数组,它简单的在数组的每一个元素上应用传入的函数,这也意味着只有存在的元素会被访问和处理。

       如果我们用console.log替换处理函数,将可以得到另外的有趣结果: [1,2,3,"csser"].forEach(console.log);

      结果:  

      1, 0, Array[1, 2, 3, "csser"]

      2, 1, Array[1, 2, 3, "csser"]

      3, 2, Array[1, 2, 3, "csser"]

      csser, 3, Array[1, 2, 3, "csser"]

      这里forEach函数每次调用console.log时会传入3个参数。显而易见,这3个参数分别是:当前项、当前项索引和数组本身,

      forEach是一个基本的数组高阶(higher-order)方法,其语法定义为: array.forEach(callback[, thisObject]) 第一个参数我们已经知道了,它是一个拥有3个参数的函数,该函数将应用于数组的每一项。

      而第二个参数表示上下文对象(context object)或者this值,用于指向回调函数的this引用。这有时会挺有用,比如当我们想使用某个对象的方法作为forEach的处理函数时: 

    复制代码
      var database = {
        users: ["CSSer", "John", "David"],
        sendEmail: function (user) {
          if (this.isValidUser(user)) {          /* 发送消息 */       }     },     isValidUser: function (user) {        /* 验证代码 */ }     }; // 向每个用户发送邮件 database.users.forEach(database.sendEmail,database);
    复制代码

      简单分析下,在sendMail函数内部的this指向database对象,并且this.isValidUser指向必须的函数,如果我们不传入第二个参数,this值会被默认指向全局对象(在浏览器中是window)或者在strict模式下指向undefined。

  • 相关阅读:
    高斯消元算法
    Fermat小定理的证明
    Pollard Rho 算法简介
    做一些无聊的题
    永远不要相信自己的傲慢
    笔记-数据结构进阶
    笔记-区间问题
    线段树板子
    [DarkBZOJ3694] 最短路
    [CF321D] Ciel and Flipboard
  • 原文地址:https://www.cnblogs.com/hgbgfg/p/5448572.html
Copyright © 2011-2022 走看看