You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中for...in循环遍历对象的机制及属性访问疑问

为什么for...in循环中直接访问crewMember.name会返回undefined?

核心原因很简单:for...in循环遍历的是对象的属性名(键),而非属性对应的值。

看你最初的代码:

for (let crewMember in spaceship.crew){
  console.log(`${crewMember}: ${crewMember.name}`);
}

这里的crewMember其实是spaceship.crew对象的属性名字符串——也就是"captain"、"chief officer"、"medic"、"translator"这些字符串。字符串本身并没有name属性,所以crewMember.name自然会返回undefined。

而当你修改为spaceship.crew[crewMember].name时,你做了两步关键操作:

  1. 通过spaceship.crew[crewMember],用属性名字符串取出了对应的属性值(也就是每个船员的对象,比如{name: 'Lily', degree: 'Computer Engineering', ...})
  2. 再从这个船员对象上访问name属性,自然就能得到正确的姓名。

举个更简洁的例子帮你理解:

const team = {
  leader: { name: "Jack" },
  member: { name: "Rose" }
};
for (let key in team) {
  console.log(key); // 输出 "leader"、"member"(都是字符串)
  console.log(team[key]); // 输出 {name: "Jack"}、{name: "Rose"}(属性值)
  console.log(team[key].name); // 输出 "Jack"、"Rose"
}

最后再提炼下关键点:

  • for...in循环的迭代变量是对象的属性名字符串,不是属性对应的实际值
  • 要获取属性值,必须通过对象[属性名]的方式(如果属性名是合法标识符也可以用.,但像chief officer这种带空格的属性名只能用方括号)
  • 只有拿到属性值(也就是船员对象)后,才能访问它的name等属性

内容的提问来源于stack exchange,提问作者Will Barrett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:08:25