JS的forEach和map方法的区别

1、前言javascript

  forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要做用是对数组的每一个元素执行一次提供的函数,可是它们之间仍是有区别的。jQuery也有一个方法$.each(),长得和forEach()有点像,功能也相似。可是从本质上仍是有很大的区别的,那么咱们探探究竟。java

2、forEach和map语法数组

2.一、语法:函数

//forEach
array.forEach(callback(currentValue, index, array){
    //do something
}, this)

//或者
array.forEach(callback(currentValue, index, array){
    //do something
})  

//map:
var new_array = arr.map(callback[, thisArg]) 

//$.each()
$(selector).each(function(index,element))  //注意参数的顺序

callback: 为数组中每一个元素执行的函数,该函数接收三个参数,this

参数一:当前数组中元素;参数二:索引; 参数三:当前数组。spa

this:可选,执行会掉时候,this的指向。prototype

2.二、区别code

  2.2.一、forEach()返回值是undefined,不能够链式调用。blog

  2.2.二、map()返回一个新数组,原数组不会改变。索引

  2.2.三、没有办法终止或者跳出forEach()循环,除非抛出异常,因此想执行一个数组是否知足什么条件,返回布尔值,能够用通常的for循环实现,或者用Array.every()或者Array.some();

  2.2.四、$.each()方法规定为每一个匹配元素规定运行的函数,能够返回 false 可用于及早中止循环。

3、一些栗子

3.1 在使用forEach()时候,若是数组在迭代的视乎被修改则其余元素会被跳过。由于 forEach()不会在迭代以前建立数组的副本。

3.2反转字符串

var str = '12345';
Array.prototype.map.call(str, function(x) {   //同时利用了call()方法
  return x;
}).reverse().join(''); 

3.3一个笔试题。

["1", "2", "3"].map(parseInt);  //结果  [1, NaN, NaN]   

若是想获得[1, 2,3]应该这么作

function returnInt(element){
  return parseInt(element,10);
}

["1", "2", "3"].map(returnInt);  

这主要是由于 parseInt()默认有两个参数,第二个参数是进制数。当parsrInt没有传入参数的时候,而map()中的回调函数时候,会给它传三个参数,第二个参数就是索引,明显不正确,因此返回NaN了。

3.4....

 

4、兼容性

forEach()和map()是ECMA5新引入的,可能在标准的其余实现中不存在,在使用前能够要Ployfill一下。

具体网上不少吧,更多的是在ie9如下,若是你的项目无视这些,那么你能够不care。

相关文章
相关标签/搜索