当前位置: 首页 > article >正文

JavaScript中的for in和for of的区别(js的for循环)

简述:js中的for循环大家都知道,今天来分享下for in和for of在使用时区别和注意事项,顺便做个笔记;

测试数据

    //数组
    const arr = [1, 2, 3, 4, 5]

    //对象
    const obj = {
      name: "小李",
      color: ["plum", "pink", "purple"],
      status: {
        hobby: "study",
      }
    }
    
    //字符串
    const str = "emumerable"

for  in    

1、用来遍历键名,循环得到key,只能遍历可枚举的数据,

2、例如:数组、对象、字符串、set、map等,

3、使用Object.getOwnPropertyDescriptors()方法,判断该方法下的enumerable属性是否为true,来决定该数据是否可枚举;

⭐判断数据是否可枚举

Object.getOwnPropertyDescriptors(obj);
//打印
console.log(Object.getOwnPropertyDescriptors(obj));

输出

 使用

//循环对象
for (let key in obj) {
   console.log(key);        控制台输出name color status ,为该对象的属性名
}

//循环数组
for (let key in arr) {
    console.log(key);       控制台输出0 1 2 3 4 ,为该数组下标
}

//循环字符串
for (let key in str) {
    console.log(key);       控制台输出0 1 2 3 4 5 6 7 8 9 , 为该字符下标
}

for of

1、用来遍历键值,循环得到value,只能用来遍历可迭代的数据,

2、例如:数组、字符串、set、map等,

3、使用arr[Symbol.iterator]()方法,判断该方法中是否有next()函数,来决定该数据是否可迭代;

判断数据是否可迭代

arr[Symbol.iterator]()
//打印
console.log(arr[Symbol.iterator]());

输出

 使用

//循环数组
for (let val of arr) {
   console.log(val);            控制台输出1 2 3 4 5 ,为该数组的每一项
}

其它遍历类似

当然,如果使用for of来遍历对象(对象是不可迭代的),就会报如下错误,

    for of 遍历对象是不可取的,会报错X
    for (let val of obj) {
      console.log(val);   
    }

报错:obj不是可迭代的。

enumerable  可枚举的

iterator          迭代器

iterable          可迭代的


http://www.kler.cn/a/3785.html

相关文章:

  • Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放
  • 解决用 rm 报bash: /usr/bin/rm: Argument list too long错
  • 机器人“大脑+小脑”范式:算力魔方赋能智能自主导航
  • 【AI | pytorch】torch.view_as_complex的使用
  • 大数据学习(36)- Hive和YARN
  • kubernetes学习-Service(七)
  • Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能
  • Spring学习流程介绍
  • 跨境电商卖家工具——跨境卫士内容介绍
  • 华为OD机试用java实现 -【最多获得的短信条数】(2023-Q1 新题)
  • 【Linux】计算机网络1
  • 前端布局小案例,分享3个漂亮的卡片组件
  • 【多线程】CAS
  • 最小生成树kruskal-修建公路1
  • 过等保堡垒机选择云堡垒机可以吗?有推荐的吗?
  • linxu学习之进程
  • 第十四届蓝桥杯三月真题刷题训练——第 23 天
  • day1 计算机组成与结构考点汇总
  • 使用Docker 一键部署SpringBoot和SpringCloud项目
  • 软件测试面试题 —— 整理与解析(3)
  • Docker容器高级篇
  • Vue(3)-vue中的Ajax、Vuex、路由及UI组件库
  • 【Linux】[万字] Linux下的文件操作 及 Linux文件描述符fd 详解
  • 剑指offer-二维数组中的查找
  • 你了解Java应用开发中的注入攻击吗?
  • 【Java版oj 】 day17杨辉三角形的变形、计算某字符出现次数