# 章序号/节序号/节/笔记序号
Objective:
# 概念阐释
## 语义
遍历对象中的属性,可以得到一组需要获取的属性值list。
## 语法

- `let variableName in outerObject.innerObject` 意思是变量名遍历内嵌对象中的内嵌对象
- 当要写变量名时要加上`[ ]`
# 举例子

# 类比、比较与对比
## 与[[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)