JavaScript检查对象属性值是否为对象?代码判断结果异常求助
问题排查与解决方法
嘿,我一眼就揪出你代码里的问题啦——你把typeof的用法搞反了!
问题根源
你写的判断条件是el[1] !== typeof 'object',但typeof 'object'其实是在求字符串'object'的类型,结果是"string"。你的判断就变成了「当前属性值 !== "string"」,而你的属性值分别是数字1、数字2和一个对象,它们都不等于字符串"string",所以自然所有结果都返回true。
正确的逻辑应该是先获取属性值的类型,再和'object'比较,也就是typeof el[1] !== 'object'。
额外注意:typeof null的坑
还有个JavaScript历史遗留的小bug要提醒你——typeof null会返回'object'。如果你的属性值可能出现null,想要把null和真正的对象区分开,需要额外加判断条件。
修正后的代码
const opb = { 'e' : 1, '3' : 2, '4' : {'ee':12} } Object.entries(opb).forEach(el => { const value = el[1]; // 排除对象和null的情况 const isNotObject = typeof value !== 'object' || value === null; console.log(isNotObject, typeof value); });
运行这段代码后,你会看到前两个属性(数字类型)返回true 'number',第三个属性(对象类型)返回false 'object',完全符合你的预期。
内容的提问来源于stack exchange,提问作者Kevin.a
相关产品推荐
相关产品推荐

