关于JavaScript中for...in循环取值逻辑的疑问
关于for...in循环中key与tree[key]的取值逻辑解答
我们直接拆解你的疑问:
1. 为什么打印key返回键名
在for (const key in tree)循环里,key变量每次接收的是对象的属性名称(键名)——也就是字符串形式的'name'、'ageInYears'、'hasAcorns'。它本质就是个存着键名字符串的普通变量,所以直接打印key,输出的自然是这些键名字符串。
2. 为什么tree[key]返回对应的值
JavaScript里访问对象属性有两种方式:
- 点语法:比如
tree.name,这里的name是固定的属性名,必须提前明确写出来 - 方括号语法:
tree[key],这种方式支持用变量或表达式作为属性名。它会先计算方括号内的内容(也就是当前key变量里的键名字符串),然后用这个字符串去匹配对象的属性,最终取出对应的属性值。
举个直观的例子,把循环里的逻辑单独拎出来看:
const tree = { name: 'Oak' }; const key = 'name'; console.log(key); // 输出 'name' console.log(tree[key]); // 等价于 tree['name'],输出 'Oak' console.log(tree.name); // 和上面一行效果完全一致
当循环执行时,每一轮的key都会被赋值为当前的键名,tree[key]就会动态地用这个键名去“查找”对象里对应的值,这就是两者差异的核心。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

