• forEach for...in for...of


    forEach

    orEach 方法为数组中含有有效值的每一项执行一次 callback 函数,那些已删除(使用 delete 方法等情况)或者从未赋值的项将被跳过(不包括那些值为 undefined 或 null 的项)

    callback函数会被依次传入三个函数:

    • 数组的当前项的值

    • 数组当前项的索引

    • 数组对象本身

    
    let arr = ['a','b','c'];
    arr[3] = 'd';
    arr.name = 'Tom';
    arr.forEach((value,index,data)=>{
    console.log(value,index,data)
    })
    //a 0 ["a", "b", "c", "d", name: "Tom"]
    //b 1 ["a", "b", "c", "d", name: "Tom"]
    //c 2 ["a", "b", "c", "d", name: "Tom"]
    //d 3 ["a", "b", "c", "d", name: "Tom"]
    
    
    let arr = [{name:'Jack',age:12},{name:'Lucy',age:9},{name:'Tom',age:15}];
    arr[3] = 'd';
    arr.name = 'Tom';
    arr.forEach((value,index,data)=>{
    console.log(value,index,data)
    })
    //{name:'Jack',age:12} 0 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
    //{name:'Lucy',age:9} 1 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
    //{name:'Tom',age:15} 2 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
    //d 3 [{name:'jack',age:12},{name:'lucy',age:9},{name:'Tom',age:15},'d',name:'Tom']
    

    缺点:不能跳出forEach循环,break命令与return命令都不能奏效

    for...in...

    
    Array.prototype.age = 18;
    let arr = [1,2,3];
    arr[3] = 4;
    arr.name = 'Jack';
    for(let index in arr){
    console.log('arr['+index+'] = '+arr[index])
    }
    //arr[0] = 1
    //arr[1] = 2
    //arr[2] = 3
    //arr[3] = 4
    //arr[name] = Jack
    //arr[age] = 18
    
    

    缺点:

    • 数组的键名是数字,但是for...in循环是以字符串作为键名“0”,“1”,“2”等等

    • for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键

    • 某些情况下,for...in循环会以任意顺序遍历键名

    for...in循环主要是为遍历对象而设计的,不适用于遍历数组。

    补充:

    • for-in 循环遍历的是对象的属性,而不是数组的索引
    • Array 在 Javascript 中是一个对象, Array 的索引是属性名
    • for-in 遍历属性的顺序并不确定,即输出的结果顺序与属性在对象中的顺序无关,也与属性的字母顺序无关,与其他任何顺序也无关

    for...of...

    
    Array.prototype.age = 18;
    let arr = [1,2,3];
    arr[3] = 4;
    arr.name = 'Jack';
    for(let index of arr){
    console.log(index)
    }
    //1
    //2
    //3
    //4
    
    

    优点:

    • 有着同for...in一样的简介语法,但是没有for...in那些缺点

    • 不同于forEach方法,他可以与break、continue、return配合使用

    • 提供了遍历所有数据结构的统一操作接口

    补充:

    for...in循环的是key for...of循环的是value

  • 相关阅读:
    POJ3709 K-Anonymous Sequence 斜率优化DP
    POJ3233 Matrix Power Series
    第六周 Leetcode 446. Arithmetic Slices II
    POJ1743 Musical Theme 最长重复子串 利用后缀数组
    Ural 1517. Freedom of Choice 后缀数组
    iOS跳转到另一个程序
    上传源码到github
    NSTimer用法,暂停,继续,初始化
    iOS中多线程原理与runloop介绍
    NSRunLoop 概述和原理
  • 原文地址:https://www.cnblogs.com/loveyt/p/9681793.html
Copyright © 2020-2023  润新知