zoukankan      html  css  js  c++  java
  • forEach、for in、for of 三者对比

    forEach

    forEach专门用来循环数组,可以直接取到元素,同时也可以取到index值
    存在局限性,不能continue跳过或者break终止循环,没有返回值,不能return
     
    let arr = ['a', 'b', 'c', 'd']
    arr.forEach(function (val, index, arr) {
        console.log('index:'+index+','+'val:'+val) // val是当前元素,index当前元素索引,arr数组
        console.log(arr)
    })
    //index:0,val:a
    //["a", "b", "c", "d"]0: "a"1: "b"2: "c"3: "d"
    //index:1,val:b
    //["a", "b", "c", "d"]
    //index:2,val:c
    //["a", "b", "c", "d"]
    //index:3,val:d
    //["a", "b", "c", "d"]

    for in

    for...in 一般循环遍历的都是对象的属性,遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性
    key会变成字符串类型
     
     let arr = [1,2,3,4];
     arr.b='100';
     for(let key in arr){
            console.log(key);//会把b输出来
        }
    //遍历数组时,item表示索引值, arr表示当前索引值对应的元素 arr[item]
    var arr = ['a','b','c'];
    for (var item in arr) {
        console.log(item) //0 1 2
        console.log(arr[item]) //a b c
    }
    //遍历对象时,item表示key值,arr表示key值对应的value值 obj[item]
    var obj = {a:1, b:2, c:3};    
    for (let item in obj) {
      console.log("obj." + item + " = " + obj[item]);
    }
    // obj.a = 1
    // obj.b = 2
    // obj.c = 3

    for of

    for of是ES6新引入的特性。修复了ES5中for in的不足
    允许遍历 Arrays(数组)、Strings(字符串)、Maps(映射)、Sets(集合)等可迭代的数据结构
    for of 支持return, 只能遍历数组不能遍历对象(遍历对象需要通过和Object.keys()搭配使用)
    /*循环一个数组*/
    let arr = ['A', 'B', 'C']
    for (let val of arr) {
        console.log(val) 
    }
    // A B C
    
    /*循环一个字符串:*/
    let iterable = "abc";
    
    for (let value of iterable) {
      console.log(value);
    }
    // "a"
    // "b"
    // "c"
    
    /*循环一个拥有enumerable属性的对象*/
    for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }
    //for of 并不能直接使用在普通的对象上,需要通过和Object.keys()搭配使用

    总结:

    forEach更多的用来遍历数组
    for in 一般常用来遍历对象或json
    for of 用来遍历数组非常方便且比较安全
    for in循环出的是key,for of循环出的是value
  • 相关阅读:
    vue-element-admin项目install出现的问题
    关于html5 Notification桌面通知无法在谷歌浏览器显示的问题
    C#调用存储过程执行缓慢,但在数据库中执行却很快的问题
    IdnentiyServer-使用客户端凭据访问API
    IdentityServer开题篇
    IdentityServer4客户端JWT解密实现(基于.net4.0)
    iis访问网络路径映射问题(UNC share)
    .net core部署在iis上
    git blame 查找修改者
    代码管理工具-将项目文件打成tar包,并且排除.git目录
  • 原文地址:https://www.cnblogs.com/theblogs/p/10520590.html
Copyright © 2011-2022 走看看