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

JavaScript foreach循环中对象属性访问返回undefined的原因

为什么访问对象属性时返回undefined?

你遇到的问题核心在于对象属性访问的语法错误,咱们一步步拆解问题:

先看你代码里的关键逻辑段:

headers.forEach(function(obj) {
  if(fields.indexOf(obj) == '-1'){
    console.log(headersObj.c);
    console.log(headersObj.obj);
    console.log(obj);
    notInTemplate.push(obj);
  }
});

你看到的undefined,是因为headersObj.obj这行代码的写法错误:

  • 当使用点语法(.)访问对象属性时,点后面的内容会被当作字面量属性名——也就是说JS会去headersObj里找一个名叫"obj"的属性,但你的headersObj里只有a、b、c三个属性,自然找不到,所以返回undefined。
  • 而你真正想访问的是变量obj对应的属性,这时候必须用方括号语法([]),把变量放在方括号里,JS才会解析变量的值作为属性名。

修正后的代码如下:

const headersObj = {a: "a", b: "b", c: "c"};
const headers = ["a", "b", "c"];
const fields = ["a", "b"];
const notInTemplate = [];

headers.forEach(function(obj) {
  // 注意:indexOf返回数字类型,要和数字-1比较,避免隐式类型转换
  if(fields.indexOf(obj) === -1){
    console.log(headersObj.c);
    console.log(headersObj[obj]); // 改用方括号语法访问变量对应的属性
    console.log(obj);
    notInTemplate.push(obj);
  }
});

console.log(notInTemplate);

另外补充个小细节:你原来的fields.indexOf(obj) == '-1'也有隐患——indexOf返回的是数字类型的索引(找不到时为-1),和字符串'-1'用==比较会触发隐式类型转换,建议改成严格相等的=== -1,避免潜在bug。

运行修正后的代码,输出会变成:

c
c
c
[ 'c' ]

完全符合你的预期。

内容的提问来源于stack exchange,提问作者James Bowler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:12