JavaScript基础之Array?forEach使用示例
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
前言
forEach()
方法对数组的每个元素执行一次给定的函数。
回调函数中传递三个参数:
- 第一个参数,就是当前正在遍历的元素
- 第二个参数,就是当前正在遍历的元素的索引
- 第三个参数,就是正在遍历的数组
尝试一下
var list = ["云层上的光", "初心", "栾树"]; list.forEach(function(item, index, array){ console.log(item,index,array) });
输出内容如下:
那我就好奇了,在forEach回调函数中的this
指向谁呢?forEach函数是否有返回值
var list = ["云层上的光", "初心", "栾树"]; var value = list.forEach(function(item, index, array){ console.log(this); }); console.log(value);
可以看到 this
指向 window
并且forEach没有返回值,返回值为 undefined
那我们可以更改this指向吗?
forEach其实接受两个参数,第二个参数 可选参数。当执行回调函数时,用作 this 的值。
forEach实现
Array.prototype.myForEach = function (callback) { var _arr = this,// 调用时谁 this就是谁 _len = _arr.length, thisArg = arguments[1] || window; // 校验callback之能是 function时才往下执行 if (typeof callback !== 'function') { throw new Error(`${callback} is not a function`); } // for循环 for (var i = 0; i < _len; i++) { callback.apply(thisArg, [_arr[i], i, _arr]); } // 注意 forEach 没有返回值 }
对象模仿数组
对象的原型上并没有 forEach,所以我们调用 Array.prototype.forEach
方法通过call
改变方法内部的this
指向,myForEach
内部循环需要length
, 所以我们在对象中模拟了添加了一个length
属性,对象的key 分别为 0,1,2 分别对应了循序中的下标。
const arrayLike = { length: 3, 0: 2, 1: 3, 2: 4, }; Array.prototype.forEach.call(arrayLike, (x) => console.log(x));
forEach跳出循环体?
forEach
可以跳出循环体吗?其实 return
和 break
是无法做到的,不过可以使用 throw new Error
var list = ["云层上的光", "初心", "栾树"]; try{ list.forEach(item=>{ if(item === "初心") throw new Error("初心"); }) }catch(err){ if(err.message === "初心") console.log("在执行到初心时跳出循环体了") else console.error(err) }
以上就是JavaScript基础之Array forEach使用示例的详细内容,更多关于JavaScript Array forEach的资料请关注程序员之家其它相关文章!
相关文章
Javascript typeof与instanceof的区别
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的,需要的朋友可以参考下2016-10-10Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
function 是 Javascript 中的第一类对象,这就意味着函数可以像其他值一样被传递。一个最常见的用法就是将一个匿名函数作为回调函数传递到另外一个异步函数中。2014-06-06javascript中实现兼容JAVA的hashCode算法代码分享
这篇文章主要介绍了javascript中实现兼容JAVA的hashCode算法代码分享,实现跟JAVA中的运算结果一致,需要的朋友可以参考下2014-08-08
最新评论