美文网首页
for in 和for of实用对比

for in 和for of实用对比

作者: 玖肆seven | 来源:发表于2021-01-12 10:30 被阅读0次

for……in……是ES3的
1, 遍历对象:

const obj = {a:1, b:2 ,c:3}
for (const i in obj) {
        i  // a b c
        obj[i] // 1 2 3
}

2, 遍历数组:

const arr= ['a', 'b' ,'c']
for (const i in arr) {
        i  // 0 1 2
        arr[i] // a b c
}

for……of……是ES6的
先看遍历数组

const arr = ['a', 'b', 'c']
for (const i of arr) {
      i // a b c
}

着重看一下遍历对象
还是先遍历个普通对象

const obj = {a:1, b:2 ,c:3}
for (const i of obj) {
        console.log(i)
}

啪!报错了


image.png

所以这个iterable是什么呢?
这里就要说到for……of……是不能遍历普通对象的,只限于迭代器(iterator)。
打印数组和对象就能看出对比:

image.png
那么,这些可以被遍历的统统成为可迭代对象(包括Array, Map, Set, String, TypedArray, arguments对象等等)
那一个普通对象就不能使用for……of遍历了嘛?当然不是。
1,如果是 类数组对象,直接用Array.from()转化为数组即可。
const obj = {
    0: 1
    1: 2
    length: 2
}
obj  = Array.from(obj)
for(const i of obj){
    console.log(i)
}

2, 如果是 非类数组对象

const obj = {
    a:1,
    b:2,
    c:3
};
 // function*(){},es6新语法,function 后面带 * 的叫做generator,
 // 当你调用一个generator函数的时候,你会获得一个iterator对象,
 // 在generator内部你可以使用 yield 语句
obj[Symbol.iterator] = function*(){
    const keys = Object.keys(obj)
    for(const i of keys){
        yield [i,obj[i]]
    }
};

for(const [k,v] of obj){
    console.log(k,v)
}

3,遍历数组对象

const list  = [{
name:'我是谁',
age:'几岁啦'
}, {
name:'我是皮卡丘',
age:'5岁啦'
}]
for (const i of list) {
   i.name // 我是谁 我是皮卡丘
   i.age // 几岁啦 5岁啦
}

for……of……迭代普通对象最优解
ES6中有 Object.keys() 、 Object.values() 、 Object.entries() 和for of 配合迭代。

const obj = {
    a: 1,
    b: 2,
    c: 3
};
for(const key of Object.keys(obj)) { // Object.keys(obj)=>["a", "b","c"]
    console.log(key);
}
// 结果 :  a  b  c
for(const value of Object.values(obj)) {// Object.values(obj)=>[1,2,3]
    console.log(value);
}
// 结果 :  1  2  3
for(const [index , item] of Object.entries(obj)) { // Object.entries(obj)=>[["a",1],["b",2],["c",3]]
    // 这里用方括号,主要看你要解构的是什么格式
    console.log(index,item);
}
// 结果 a  1  b  2  c  3
何以解忧 唯有学习

相关文章

  • for in 和for of实用对比

    for……in……是ES3的1, 遍历对象: 2, 遍历数组: for……of……是ES6的先看遍历数组 着重看一...

  • Sublime的 phpfmt 插件 自动删除use代码解决方案

    安装 Sublime的 phpfmt 插件(解决一些不良习惯,其实用和不用做一些对比,更能体现处优略势)步骤: S...

  • git常用、实用操作:

    http://iissnan.com/progit/ git常用、实用操作: (1)对比两次修改改了哪些文件。 $...

  • 社交的价值和方法

    猫叔讲的内容很实用,拿来就能用。 01,向上看,和优秀的人玩 没有对比,就没有伤害。如果一直在和普通人玩,可能没有...

  • 用这7种方法,给你2018年的构图技巧来个升级吧!

    构图君曾重点对基本对比构图法进行了解读。部分读者反映,这些基本的对比构图法虽然比较实用,但是,很多都是已经掌握了的...

  • 构图与色彩设计

    点 点和干扰点 虚实对比、数量对比 例:鸟和背景 明暗对比、数量对比 猫 水平线、肌理对比 ...

  • 2018-02-25(视觉)

    这7个实用的设计技巧,能让UI高级感更强烈 1、使用色彩和字重来创造层次结构,而不是单纯的大小对比 2、不要在有色...

  • 知足和感恩,是对比来的

    和消防的对比 和姜维、知名的对比

  • 练习7-7

    对文件中的数据进行对比,这个程序很实用啊. 复杂倒是不复杂. 首先读取参数.如果碰到'-'((*++argv)[0...

  • Kotlin 注解全解析

    类比思维是非常实用的思维方式,我们跟Java的注解进行对比,就可以快速理解Kotlin的注解。 Java 代码: ...

网友评论

      本文标题:for in 和for of实用对比

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