# 章序号/节序号/节/笔记序号 Objective: # 概念阐释 ## 语义 遍历对象中的属性,可以得到一组需要获取的属性值list。 ## 语法 ![](http://image.harryrou.wiki/2023-03-29-CleanShot%202023-03-29%20at%2007.56.46%402x.png) - `let variableName in outerObject.innerObject` 意思是变量名遍历内嵌对象中的内嵌对象 - 当要写变量名时要加上`[ ]` # 举例子 ![](http://image.harryrou.wiki/2023-03-29-CleanShot%202023-03-29%20at%2008.12.18%402x.png) # 类比、比较与对比 ## 与[[js Iterators 数组函数内置对象 forEach()]]的区别 - `forEach()`是专为数组设计的,不能遍历对象,`for...in`是为对象设计的 - `for...in`虽然可以用在数组上,但`forEach()`是处理数组更简洁、高效的方法 # 问题 - [练习题](https://www.codecademy.com/courses/introduction-to-javascript/lessons/objects/exercises/for-in) 用`for...in`loop,遍历`spaceship`对象中的属性,并print ```js captain : Lily chief officer : Dan medic : Clementine translator : Shauna ``` 用`for...in`loop,遍历`spaceship`对象中的属性,并print ```js Lily: Computer Engineering Dan: Aerospace Engineering Clementine: Physics Shauna: Conservation Science ``` # 问题答案 ```js for(let crewMember in spaceship.crew){ console.log(`${crewMember} : ${spaceship.crew[crewMember].name}`) } for (let crewDegree in spaceship.crew){ console.log(`${spaceship.crew[crewDegree].name}: ${spaceship.crew[crewDegree].degree}`) } ``` # 备注(经验集/错误集) ## 参考资料 > ## [为什么用 for ... in?](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in#%E4%B8%BA%E4%BB%80%E4%B9%88%E7%94%A8_for_..._in) `for ... in`是为遍历对象属性而构建的,不建议与数组一起使用,(遍历)数组可以用`Array.prototype.forEach()`和`for ... of`,那么`for ... in`的到底有什么用呢? 它最常用的地方应该是**用于调试**,可以更方便的去检查**对象属性**(通过输出到控制台或其他方式)。尽管对于处理存储数据,数组更实用些,但是你在处理有`key-value`数据(比如属性用作“键”),需要检查其中的任何键是否为某值的情况时,还是推荐用`for ... in`。 > [MDN for...in](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in)