• 各种for


    forin forof forEach $.each

    var andy = 'dog eat bone.';
    var arr = [];
    

    traditional for

    远古时候的for循环最常用也最经典。

    for(let i = 0 ; i < andy.length ; i++){
        arr.push(andy[i])
    }
    log(arr)//["d", "o", "g", " ", "e", "a", "t", " ", "b", "o", "n", "e", "."]
    

    也可以使用continue和break来中断循环。

    for(let i = 0;i<andy.length;i++){
        if(andy[i] === 'e'){
            continue;
        }
        arr.push(andy[i])//["d", "o", "g", " ", "a", "t", " ", "b", "o", "n", "."]
    }
    
    for(let i = 0;i<andy.length;i++){
        if(andy[i] === 'e'){
            break;
        }
        arr.push(andy[i])//["d", "o", "g", " "]
    }
    

    forEach()

    arr.forEach(function(e,i,arr1){
        console.log(e,i,arr1)//输出值,下标,和数组
    })
    

    forEach()是Array类型所拥有的方法,因此遍历字符串需要call的帮忙。

    Array.prototype.forEach.call(andy,(v) =>{
        arr.push(v)
    })
    log(arr)//["d", "o", "g", " ", "e", "a", "t", " ", "b", "o", "n", "e", "."]
    

    for in

    for(let prop in andy){
        log(prop,andy[prop])
    }
    

    for in 就像是对象的forEach,只不过所有的类型都可以用这个遍历,但不一定是最合适的,它主要存在两个问题:

    1. 会遍历原型链上的属性;

    2. 输出的结果是无法保证顺序的。

      //遍历原型链上的属性
      String.prototype.num=13;
      for(var i in andy){
      arr.push(andy[i]);
      }
      log(arr);//["d", "o", "g", " ", "e", "a", "t", " ", "b", "o", "n", "e", ".", 13]

    这个可以通过Object.prototype.hasOwnProperty()来校验是不是自己本身的属性,不过用起来就略显愚钝了。

    String.prototype.age=13;
    var result=[];
    for(var i in andy){
        if(andy.hasOwnProperty(i)){
            result.push(andy[i]);
        }
    }
    log(result);
    
    
    //无序的结果
    var o = {  
        '01':'d',  
        '2':'o',  
        '今天':'g'  
    }  
    for (let k in o){  
        log(o[k])//'o','d','g'
    }  
    

    因此推荐只用来遍历Object

    for of

    for(let v of andy){
        arr.push(v)
    }
    log(arr)//["d", "o", "g", " ", "e", "a", "t", " ", "b", "o", "n", "e", "."]
    

    ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。

    for of 是es6实现的方法,可以遍历所有Iterator接口的数据结构,set, map,数组,以及一些类数组的数据类型(domlist arguments)。

    字符串转数组也别的办法:

    log([...'dog eat bone.'])//["d", "o", "g", " ", "e", "a", "t", " ", "b", "o", "n", "e", "."]
    log(Array.from('dog eat bone.'))
    

    $.each(obj,callback,args)

    $(selector).each()就是调用$.each()方法实现的

    each: function( callback, args ) {
          return jQuery.each( this, callback, args );
      },
    

    而$.each()的源码:

    Jquery = {
        each: function(obj, callback, args) {
            var value,i = 0,
            length = obj.length,
            isArray = isArraylike(obj);//检验是否是数组或者类数组
            //args存在的时候
            if(args) {
                if(isArray) {
                    for(; i < length; i++) {
                        value = callback.apply(obj[i], args);//funciton(args){}
                        if(value === false) { break; }
                    }
                } else {
                    for(i in obj) {
                        value = callback.apply(obj[i], args);
                        if(value === false) { break; }
                    }
                }
                // A special, fast, case for the most common use of each
            } else {
                //args不存在的时候
                if(isArray) {
                    //若是数组
                    for(; i < length; i++) {
                        value = callback.call(obj[i], i, obj[i]);//function(i,e){}
                        if(value === false) { break; }//value若是存在return的值就直接结束
                    }
                } else {
                    //若不是数组
                    for(i in obj) {
                        value = callback.call(obj[i], i, obj[i]);
                        if(value === false) { break; }
                    }
                }
            }
        }
    }
  • 相关阅读:
    实战SpringCloud响应式微服务系列教程(第八章)构建响应式RESTful服务
    说说hashCode() 和 equals() 之间的关系?
    说说Object类下面有几种方法呢?
    Redis中是如何实现分布式锁的?
    从实践角度重新理解BIO和NIO
    数据的异构实战(一) 基于canal进行日志的订阅和转换
    The base command for the Docker CLI.
    Installing Jenkins to Centos Docker
    Docker Community Edition for CentOS
    Kafka自我学习-报错篇
  • 原文地址:https://www.cnblogs.com/mydia/p/6764769.html
Copyright © 2020-2023  润新知