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

JavaScript问题:对象属性值均为真值却打印undefined,原因何在?

为什么控制台打印undefined?

我希望检查persona对象的属性值是否为假值或真值,据此在控制台打印对象键值或显示错误提示。但本例中persona对象的所有属性值均为真值,控制台却打印出undefined,请问这是什么原因?

let persona = {
  generalThings: {
    name: "Fijiwa",
    age: 22,
    birthday: "01.01.2000",
    placeOfBirth: "Tokyo",
    degree: "undefined",
    programLanguage: "JavaScript"
  },

  favouriteThings: {
    musicArtist: "Drake",
    book: "Meditations",
    person: "k",
    fighter: "Nate Diaz"
  },

}

foo = () => {
  for (key in persona) {
    const areTruthy = Object.values(persona[key]).every(value => value);
    console.log(areTruthy === true ? persona[key].value : "please complete the empty fields ");
  }
}
foo();

问题原因及解决方法

  • 核心问题:你在三元表达式里写了persona[key].value,但persona[key]对应的是generalThings和favouriteThings这两个子对象,它们根本没有value这个属性,所以访问它必然返回undefined。
  • 修正方向:如果你想打印子对象的内容,直接用persona[key]代替persona[key].value就行;要是想输出更易读的键值格式,可以用JSON.stringify(persona[key], null, 2)来美化输出。
  • 额外优化:代码里的foo没有用const/let声明,会变成全局变量,建议加上声明避免污染全局作用域。

修改后的代码示例:

const persona = {
  generalThings: {
    name: "Fijiwa",
    age: 22,
    birthday: "01.01.2000",
    placeOfBirth: "Tokyo",
    degree: "undefined",
    programLanguage: "JavaScript"
  },

  favouriteThings: {
    musicArtist: "Drake",
    book: "Meditations",
    person: "k",
    fighter: "Nate Diaz"
  }
}

const foo = () => {
  for (const key in persona) {
    const areTruthy = Object.values(persona[key]).every(value => value);
    // 直接打印子对象
    console.log(areTruthy ? persona[key] : "please complete the empty fields ");
    // 或者美化打印
    // console.log(areTruthy ? JSON.stringify(persona[key], null, 2) : "please complete the empty fields ");
  }
}
foo();

内容的提问来源于stack exchange,提问作者fujitsu fiji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:40:36