首页 > 编程语言 >JavaScript 中的 `for...in` 和 `for...of`

JavaScript 中的 `for...in` 和 `for...of`

时间:2023-05-11 17:26:11浏览次数:52  
标签:... 遍历 obj 对象 JavaScript 循环 属性

JavaScript 中的 for...infor...of 是两种常用的迭代循环语句。它们的用途和行为是不同的。

for...in 循环用于循环遍历对象的属性,它会遍历对象的可枚举属性和原型链上的可枚举属性。

const obj = { a: 1, b: 2 };
for (let prop in obj) {
  console.log(prop);  // 输出 'a' 和 'b'
}

上面的代码遍历了 obj 对象的所有属性,并输出了属性名称。

需要注意的是,for...in 循环不保证属性遍历的顺序是固定的,所以不能在遍历对象的时候依赖属性遍历的顺序。

另外,for...in 循环还有一个重要的用途,就是遍历对象的原型链上的属性。

function Person() {
  this.name = 'Tom';
}

Person.prototype.age = 18;

const p = new Person();

for (let prop in p) {
  console.log(prop);  // 输出 'name' 和 'age'
}

上面的代码中,p 对象既有自己的属性,也有继承自原型的属性。for...in 循环可以同时遍历这两种属性。

for...of 循环用于遍历可迭代对象(包括 ArrayMapSetString 等对象)的元素。它只遍历对象的值,而不是键或者属性。

const arr = ['a', 'b', 'c'];
for (let item of arr) {
  console.log(item);  // 输出 'a'、'b'、'c'
}

上面的代码遍历了 arr 数组中所有的元素,并输出每个元素的值。

另外,需要注意的是,for...of 循环只能用于遍历迭代对象的值,而不能用于遍历对象的属性。如果用于非迭代对象上,将会出现类型错误的异常。

const obj = { a: 1, b: 2 };
for (let item of obj) {
  console.log(item);  // 抛出 TypeError 异常: obj is not iterable
}

上面的代码中,obj 不是一个可迭代对象,所以使用 for...of 循环将会抛出一个 TypeError 异常。

标签:...,遍历,obj,对象,JavaScript,循环,属性
From: https://www.cnblogs.com/echohye/p/17391656.html

相关文章

  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • JavaScript 面向对象编程
    面向对象编程ObjectOrientedProgramming面向对象编程用对象把数据和方法聚合起来。面向对象编程的优点能写出模块化的代码能使得代码更灵活能提高代码的可重用性面向对象编程的原则继承(inheritance):子类/派生类从父类/基类/超类中派生,形成继承结构封装(encapsulati......
  • 使用ICTCLAS JAVA版(ictclas4j)进行中文分词(附ictclas,停用词表,commons-lang-2.4.jar下
    一、ICTCLAS的介绍中国科学院计算技术研究所在多年研究基础上,耗时一年研制出了基于多层隐码模型的汉语词法分析系统ICTCLAS(InstituteofComputingTechnology,ChineseLexicalAnalysisSystem),该系统的功能有:中文分词;词性标注;未登录词识别。分词正确率高达97.58%(最近的973专......
  • fatal: unable to access 'https://gitee.com/...': Could not resolve host: gitee.c
    把https模式换成ssh用gitremote-v查看使用的是https还是ssh等$gitremote-v>originhttps://github.com/USERNAME/REPOSITORY.git(fetch)>originhttps://github.com/USERNAME/REPOSITORY.git(push)使用gitremoteset-url命令将远程URL从HTTPS更改为SSH$gitremote......
  • IE 6下 a javascript:void(0)问题
     在购物页面的“立即购买”按钮是用a标签来做的,设置了href="javascript:void(0);",同时在a上面添加了onclick事件,目的是在点击之后处理Cookies并跳转到订单页面。反复测试发现ie6下没有跳转,ff下是正常的。在网上搜到的结果是ie6的bug导致这样的结果。 摘自网络产生这样的结果是......
  • javascript基础练习
     本练习根据w3cschool:https://www.w3cschool.cn/javascript/javascript-conventions.html 1.javascript简介1.1JavaScript是脚本语言JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由所有的现......
  • linux系统异常关机,重启后显示:probing edd (edd=off to disable) ....ok
    机房掉电,linux服务器重启后显示:probingedd(edd=offtodisable)....ok  处理方法一:1、开机选择内核时上下键卡住,根据提示按e进入grub界面2、编辑linux行末尾添加edd=off3、ctrl+x 处理方法二:1、使用U盘进入救援模式,切换命令行界面,挂载系统磁盘chroot/mnt/sysim......
  • JavaScript 和浏览器
    模块参见ES6部分DOM参见Web相关部分选择器document.querySelector()来获取网页的对应HTML元素document.querySelectorAll()来获取网页的所有对应HTML元素document.getElementById()根据ID获取元素document.getElementsByClassName()根据类名获取元素docum......
  • 学习JavaScript数据结构与算法 第八章
    八,字典和散列表8.3ES2015Map类ECMAScript2015新增了Map类。constmap=newMap();map.set('Gandalf','[email protected]');map.set('John','[email protected]');map.set('Tyrion','[email protected]');......
  • 学习JavaScript数据结构与算法 第七章
    7.集合7.4ESMAScript2015---Set类ECMAScript2015新增了Set类作为JavaScriptAPI的一部分。我们可以基于ES2015的Set开发我们的Set类。constset=newSet()set.add(1)console.log(set.values())//@iteratorconsole.log(set.has(1))console.log(set......