var each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return;
//首先判断是否支持原生的forEach方法
if (nativeForEach && obj.forEach === nativeForEach) {
obj.forEach(iterator, context);
//判断是否是数组 +obj.length 是强制类型转换,转换成整形,相当于Number(obj.length)
} else if (obj.length === +obj.length) {
for (var i = 0, length = obj.length; i < length; i++) {
//到这里可能会有疑惑,操作返回的结果跟breaker(一个空的对象)比较,为什么呢?{}比较是内存地址的比较
//其实在some方法中, each(obj, function(value, index, list) {
// if (result || (result = iterator.call(context, value, index, list))) return breaker;
// });可以看到,很显然,这是underscore内部方便跳出循环的方法
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
//次方法以及过滤了过贴位notEnumrable属性的元素.e.g.toString,valueOf...
var keys = _.keys(obj);
for (var i = 0, length = keys.length; i < length; i++) {
if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
}
}
};

最新文章

  1. 百度贴吧python吧抓取用户名和图片
  2. 转 SQL Server中关于的checkpoint使用说明
  3. OpenGL第8,9讲小结
  4. 打印web页面指定区域的三种方法
  5. Windows 下Python操作MySQL
  6. 登录数据库后,use db很慢的问题
  7. 接口中定义变量必须为public static final的原因
  8. Vue中的v-cloak用法
  9. Python Generator 运行细节验证
  10. OOM分析工具
  11. 数据仓库建模对比: 比较表格和多维解决方案 (Comparing tabular and multidimensional solutions)
  12. 在sql中select的执行顺序
  13. 【2018.08.19 C与C++基础】编程语言类型系统简介(草稿)
  14. Google浏览器解决编码乱码问题
  15. python之list+字典练习
  16. spring开启事务时启动报错SAXParseException
  17. spark app
  18. [记录] Linux Apache隐藏index.php
  19. 解决UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xcf in position 7: ordinal not in range(128)
  20. POST提交表单,本地Windows测试无乱码,而将项目部署到服务器端产生乱码原因之一

热门文章

  1. maven 介绍(一)
  2. String类型 在底层剖析,并比较 与StringBuilding 的区别
  3. BIOS/MBR UEFI/GPT关系与区别-资料整理
  4. Java学习第三周摘要
  5. Redis-数据操作
  6. JVM反调调用优化,导致发生大量异常时log4j2线程阻塞
  7. jQuery的$.each()遍历checkbox
  8. KindEditor ctrl+v添加图片功能
  9. 第十篇:Spark SQL 源码分析之 In-Memory Columnar Storage源码分析之 query
  10. 【GAN】GAN的原理及推导