如何在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