javascript总for of和for in的区别?

都是遍历,那有什么区别呢、?

阅读 76.3k
评论
    13 个回答

    参考MDN MDN关于for of的解释
    for...of语句在可迭代对象(包括 Array, Map, Set, String, TypedArray,arguments 对象等等)上创建一个迭代循环,对每个不同属性的属性值,调用一个自定义的有执行语句的迭代挂钩.
    也就是说,for of只可以循环可迭代对象的可迭代属性,不可迭代属性在循环中被忽略了。
    并且给与了一个对比的例子

    Object.prototype.objCustom = function () {}; 
    Array.prototype.arrCustom = function () {};
    
    let iterable = [3, 5, 7];
    iterable.foo = "hello";
    
    for (let i in iterable) {
      console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
    }
    
    for (let i of iterable) {
      console.log(i); // logs 3, 5, 7
    }

    我们可以看到,对于array的不可迭代元属性objCustom、arrCustom和实例属性foo,在循环中都被忽略
    这是for in迭代KEY,for of迭代value之外最大的区别