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值是不同的,参数个数、顺序也不一致

posted @ 2017-12-03 12:47  浮云浪子  阅读(176)  评论(0编辑  收藏  举报