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
相关产品推荐
相关产品推荐

