原文:  http://www.webhek.com/javascript-foreach-call

document.querySelectorAll() 返回的并不是我们想当然的数组,而是 NodeList ,对 NodeList ,它里面没有 .forEach 方法,我们使用了这样的方法进行循环:

var divs = document.querySelectorAll('div');

[].forEach.call(divs, function(div) {
// do whatever
div.style.color = "red";
});

初次看到 [].forEach.call() 这样的代码,我觉得这种写法很有趣,为什么要这样写?为什么要用空数值引申出的方法?于是研究了一下。

[] 就是个数组,而且是用不到的空数组。用来就是为了访问它的数组相关方法,比如 .forEach 。这是一种简写,完整的写法应该是这样:

Array.prototype.forEach.call(...);

很显然,简写更方便。

至于 forEach 方法,它可以接受一个函数参数:

[1,2,3].forEach(function (num) { console.log(num); });

上面的这句代码中,我们可以访问 this 对象,也就是 [1,2,3] ,可以看出,这个 this 是个数组。

最后, .call 是一个prototype,JavaScript函数内置的。 .call 使用它的第一个参数替换掉上面说的这个 this ,也就是你要传人的数组,其它的参数就跟 forEach 方法的参数一样了。

[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"

因此, [].forEach.call() 是一种快速的方法访问 forEach ,并将空数组的 this 换成想要遍历的list。

最新文章

  1. 如何在vim里删除空行?
  2. html标签属性(attribute)和dom元素的属性(property)
  3. Popline:帅气的浮动 HTML5 文本编辑器工具栏
  4. ibatis动态多条件查询及模糊查询(oracle,mysql,sql)
  5. 清理一下电脑垃圾,打开Eclipse发现左边的全部项目消失了
  6. 常见的appbug(转)
  7. 原创:ASP.Net状态管理读书笔记--思维导图
  8. ES6 — 数组Array
  9. Java动手实验及课后程序
  10. cocos2dx中加载图片资源的方法,和从内存中获取已经加载的图片资源的方法
  11. ps,Photoshop
  12. GUI编程笔记(java)03:GUI的组件继承图
  13. Unsupported Media Type 415问题解决办法(Ajax)
  14. 基于jQuery带标题的图片3D切换焦点图
  15. 组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)
  16. Tomcat7调优及JVM性能优化for Linux环境
  17. DFB系列 之 Bilp叠加
  18. UIAlertController基本使用与内存泄露分析!!!
  19. clumsy模拟客户端网络差的场景的使用
  20. Java判断字符串是否为数字的自定义方法

热门文章

  1. UniEAP UTF 用户手册 (引擎)
  2. 转:OPC协议解析-OPC UA OPC统一架构
  3. PJzhang:CVE-2019-14287 sudo权限绕过漏洞复现
  4. Nmap之用法
  5. 二分查找算法C++实现
  6. React + Antd开发模式下的Excel导入功能
  7. [转帖]NM_CONTROLLED的含义以及网卡配置参数
  8. [转帖]彻底理解cookie,session,token
  9. python调用hanlp进行命名实体识别
  10. 这可能是最简单易懂的 ZooKeeper 笔记