美文网首页
for/forEach/for...in/for...of的区别

for/forEach/for...in/for...of的区别

作者: 彩云Coding | 来源:发表于2019-06-22 10:59 被阅读0次

    1.foreach 方法没办法使用 break 语句跳出循环,或者使用return从函数体内返回 ,可以利用抛出异常的方法终止循环,在foreach 中使用异步方法,无法保证同步执行,结果是并行的。

    2.for...in 遍历数组索引、对象的属性使用for…in遍历时,原型链上的所有属性都将被访问

    //数组
    var arr = ["星期一","星期二","星期三"];
    Array.prototype.something = ["放假","休息咯"];
    for (var i in arr){ // i是下标(索引)
        console.log(arr[i])
    }
    
    //对象
    var obj = {guangzhou: '广州', shanghai: '上海', beijing: '北京'}
    Object.prototype.something2={shenzhen:'深圳'}
    for (var i in obj){ 
        console.log(obj[i])
    }
    
    //数组
    var arr = ["星期一","星期二","星期三"];
    Array.prototype.something = ["放假","休息咯"];
    for (var i in arr){
        if(arr.hasOwnProperty(i)){ 
            console.log(arr[i])
        }
    }
    
    var arr = ["星期一","星期二","星期三"];
    arr.test = 'testing';
    for (var i in arr){ // i是下标(索引)
        console.log(arr[i])
    }
    //星期一 星期二 星期三 testing
    

    小建议:不使用 for-in 来遍历数组,除非你知道这个数组对象中没有这样的属性

    3.for...of 遍历数组的值,并不能循环一个普通对象,可以借助Object.keys()Object.values()来遍历对象。

    //数组
    var arr = ["星期一","星期二","星期三"];
    for (var i of arr){ //i是值
        console.log(i) 
    }
    //对象
    var obj = {guangzhou: '广州', shanghai: '上海', beijing: '北京'}
    for (var i of obj){ //i是值
        console.log(i)
    }
    //对象会报错:Uncaught TypeError: obj is not iterable
    //不能遍历一个普通的对象,可以通过 内建Object.keys() 方法让 for..of 也支持
    //按对象所拥有的属性值进行循环,可使用内置的Object.values()方法
    

    for...of的正常使用:

    //for-of 遍历 Set
    var uniqueWords = new Set(words);
    for (var word of uniqueWords) {
      console.log(word);
    }
    //for-of 遍历 Map,Map是键值对组成,需要用到 Es6新特性解构
    for (var [key, value] of phoneBookMap) {
      console.log(key + "'s phone number is: " + value);
    }
    //for-of 遍历原生对象
    // 输出对象自身可以枚举的值
    for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }
    

    4.数组中存在空项

    array = ['a', , 'c'];
    for (let index = 0; index < array.length; index++) {
        const element = array[index]
        console.log(element) // 没有跳过空值
    }
    //a undefined c
    
    array = ['a', , 'c'];
    array.forEach(element => {
        console.log(element) // 跳过空值
    })
    //a c
    
    array = ['a', , 'c'];
    for (const key in array) {
        console.log(array[key]) // 跳过空值
    }
    //a c
    
    array = ['a', , 'c'];
    for (const iterator of array) {
        console.log(iterator) // 没有跳过空值
    }
    //a undefined c
    

    小建议:推荐使用for...of保存数组中的空项为undefined

    相关文章

      网友评论

          本文标题:for/forEach/for...in/for...of的区别

          本文链接:https://www.haomeiwen.com/subject/kdymqctx.html