如何在JavaScript中检测未定义的对象属性?
在JavaScript中,想要检测具有undefined
值的对象属性并不罕见。虽然这在表面上看起来很简单,但undefined
是一个相当难以检查的值。
通常,解决方案会直接使用严格比较undefined
或使用typeof
。但这两种方法很难区分具有undefined
值的现有属性和不存在的属性。这反过来使它们容易出现静默错误,如果你完全拼写错误了属性名的话。
const obj = { prop : undefined };
obj.prop === undefined; // true
typeof obj.prop === 'undefined'; // true
obj.porp === undefined; // true
typeof obj.porp === 'undefined'; // true
为了解决这个问题,可以使用Object.prototype.hasOwnProperty()
方法来检查属性是否实际存在于对象上。此外,它还可以用于相反的情况,因此您还可以检测不存在的属性并相应地处理它们。
const hasUndefinedProperty = (obj, prop) =>
obj.hasOwnProperty(prop) && obj[prop] === undefined;
const obj = { prop: undefined };
hasUndefinedProperty(obj, 'prop'); // true
hasUndefinedProperty(obj, 'porp'); // false