js的 for...in 和 for...of的用法

for...in和for...of两个遍历

  • for...in是es5标准,用来遍历key值,遍历对象和数组
// 遍历对象
let obj = {
  a: 1,
  b: 2,
  c: 3
}
for (let key in obj) {
  console.log(key)
}  // a  b  c
// 遍历数组
let arr = [1, 2, 3]
for (let key in arr) {
  console.log(key)
}  // 0  1  2
  • for...of是es6标准,用来遍历value值,遍历数组,不能遍历普通对象
// 遍历数组
let arr = [1, 2, 3]
for (let value of arr) {
  console.log(value)
}  // 1  2  3

区别

  1. for...in遍历key值,for...of遍历value值
  2. for...in可以遍历对象或者数组,但是一般不推荐遍历数组,for...of不能遍历普通对象

for...of不能遍历普通对象的原因

原因是:普通对象没有Symbol.iterator属性,如果一个对象拥有Symbol.iterator属性,那么就可以使用for...of遍历

// 下面的例子摘自 阮一峰老师的ES6入门第三版
let obj = {
  data: [ 'hello', 'world' ],
  [Symbol.iterator]() {
    const self = this;
    let index = 0;
    return {
      next() {
        if (index < self.data.length) {
          return {
            value: self.data[index++],
            done: false
          };
        } else {
          return { value: undefined, done: true };
        }
      }
    };
  }
}
for (let value of obj) {
  console.log(value)
}   // hello world
// 类似数组的对象遍历  直接引用Array.prototype[Symbol.iterator]  
// 普通对象部署数组的Symbol.iterator方法,并无效果
let iterable = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3,
  [Symbol.iterator]: Array.prototype[Symbol.iterator]
};
for (let item of iterable) {
  console.log(item); // 'a', 'b', 'c'
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,764评论 0 38
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,751评论 0 13
  • 大伯走了,在一个大雨纷飞的深夜姐打了我的电话。“啊...” 我在想大伯去哪里旅游了呢?一定是很远很远的地方...
    __洪燕阅读 2,860评论 4 2
  • 到今天真正实习中,我才懂得。别人口中的经验之谈对于我们来说都是空话!我们只是随便听听,即使你说的再情真意切,也只是...
    艳子_b6c2阅读 3,865评论 0 1
  • 本文参加#未完待续,就要表白#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 时间飞快的流逝,如同白驹过隙...
    绣奇缘阅读 2,707评论 0 2

友情链接更多精彩内容