forEach对比$.each
一、准备对比测试的一些数据
var forEach = [].forEach; var arr = ["lili", "bobo", "tata"]; // 数组 var arrLike = { // 类数组 0 : "fafa",
1 : "liming",
2 : "liuliu", length : 3 }; var obj = { // 对象 name : "sonar", rules : 80 }; var str = "hello"; // 字符串(一般意义上说是类数组)
二、从方法输入来看,forEach支持数组(类数组);$.each不仅仅支持数组(类数组),还支持对象
// forEach支持数组,类数组 arr.forEach(function(item, i){ console.warn("arr" + i, item); });
输出:
>> arr0 lili
>> arr0 bobo
>> arr2 tata forEach.call(arrLike, function(item, i){ console.warn("arrLike" + i, item); })
输出:
>> arrLike0 fafa
>> arrLike1 liming
>> arrLike2 liuliu
1、$.each重点支持了对象的遍历:
$.each(obj, function(i, item){
console.warn("obj-" + i, item);
})
输出:
>> obj-name sonar
>> obj-rules 80
2、虽然说字符串是通常意义上的类数组,但是$.each方法不能对字符串进行逐个字符的遍历(报错)
原生的forEach方法是可以的:
forEach.call("hello", function(value, i){ console.warn(value); });
3、forEach还可以带第二个参数,作为回调中的this
三、返回值的不同
forEach方法不返回值(也就是返回默认的undefined)
$.each会返回遍历的那个数组/对象
四、执行逻辑上的差别
1、$.each可以在循环中提前退出,forEach一路跑到底
$.each(arr, function(i, item){
if (item === 1) {
return false; // 撞墙了,退出
}
})
2、虽然都传一个callback方法,但是方法中的this值是不同的,参数个数、顺序也不一致