angular forEach方法遍历源码解读


Posted in Javascript onJanuary 25, 2017

angular中提供了forEach()方法用于遍历对象或数组,供大家参考,具体内容如下

function forEach(obj, iterator, context) {
 var key, length;
 if (obj) {
  if (isFunction(obj)) {
   for (key in obj) {
    // Need to check if hasOwnProperty exists,
    // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
    if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else if (isArray(obj) || isArrayLike(obj)) {
   var isPrimitive = typeof obj !== 'object';
   for (key = 0, length = obj.length; key < length; key++) {
    if (isPrimitive || key in obj) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else if (obj.forEach && obj.forEach !== forEach) {
    obj.forEach(iterator, context, obj);
  } else if (isBlankObject(obj)) {
   // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
   for (key in obj) {
    iterator.call(context, obj[key], key, obj);
   }
  } else if (typeof obj.hasOwnProperty === 'function') {
   // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
   for (key in obj) {
    if (obj.hasOwnProperty(key)) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  } else {
   // Slow path for objects which do not have a method `hasOwnProperty`
   for (key in obj) {
    if (hasOwnProperty.call(obj, key)) {
     iterator.call(context, obj[key], key, obj);
    }
   }
  }
 }
 return obj;
}

官方描述:

forEach方法可以遍历数组或对象,函数有三个参数为别为:value,key,obj。
1)、value value指当遍历的对象或数组元素当前的值
2)、 key 是对象属性的的key或者数组的索引
3)、 obj obj即被遍历的对象或数组本身

示例:

var values = {name: 'misko', gender: 'male'};
   var log = [];
   angular.forEach(values, function(value, key) {
    this.push(key + ': ' + value);
   }, log);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JqGrid web打印实现代码
May 31 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
使用js解决由border属性引起的div宽度问题
Nov 26 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
理解JavaScript原型链
Oct 25 Javascript
Vuejs实现带样式的单文件组件新方法
May 02 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 Javascript
详解VUE 数组更新
Dec 16 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
Element Card 卡片的具体使用
Jul 26 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 Javascript
three.js实现围绕某物体旋转
Jan 25 #Javascript
基于Marquee.js插件实现的跑马灯效果示例
Jan 25 #Javascript
angular和BootStrap3实现购物车功能
Jan 25 #Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 #Javascript
谈谈JavaScript数组常用方法总结
Jan 24 #Javascript
js实现日历的简单算法
Jan 24 #Javascript
JSON键值对序列化和反序列化解析
Jan 24 #Javascript
You might like
使用eAccelerator加密PHP程序
2008/10/03 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python控制台英汉汉英电子词典
2020/04/23 Python
浅析Python多线程下的变量问题
2015/04/28 Python
python简单实现操作Mysql数据库
2018/01/29 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
大学四年学习的自我评价分享
2013/12/09 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
会议通知格式范文
2015/04/15 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
辩论赛新闻稿
2015/07/17 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
Python内置数据类型中的集合详解
2022/03/18 Python