JavaScript 检测对象属性是否定义

要检查对象属性是否为 undefined,需要在对象属性上使用 typeof 运算符。 typeof 运算符返回一个字符串,指示值的类型。 如果对象上不存在该属性,则运算符返回字符串 "undefined" 。

const obj = {name: 'Tom'};

if (typeof obj.age === 'undefined') {
  console.log(' age 属性未定义');
} else {
  console.log(' age 属性定义');
}

我们使用 typeof 运算符来检查对象上的 age 属性是否未定义。

typeof 运算符返回一个字符串,该字符串指示特定值的类型。 这里有些例子。

console.log(typeof ''); // 'string'
console.log(typeof undefined); // 'undefined'
console.log(typeof 5); // 'number'
console.log(typeof {}); // 'object'
console.log(typeof []); // 'object'

请注意,如果对象包含 age 属性并且其值设置为未定义,则我们的 if 语句中的条件也将得到满足。

const obj = {name: 'Tom', age: undefined};

if (typeof obj.age === 'undefined') {
  console.log('age 属性未定义');
} else {
  console.log('age 属性定义');
}

这在大多数情况下就足够了,但是如果我们想检查该属性是否在对象上根本不存在,我们可以使用 Object.hasOwnProperty 方法。

const obj = {name: 'Tom', age: undefined};

if (!obj.hasOwnProperty('age')) {
  console.log("对象没有age属性");
} else {
  console.log("对象存在age属性");
}

如果对象具有属性,则 hasOwnProperty 方法返回 true,否则返回 false

在示例中,我们的 else 块运行,因为属性 age 存在于对象上,即使它的值未定义。

我们将很少(如果有的话)看到应用程序中使用的 hasOwnProperty 方法。 对于大多数用例,第一种方法效果很好。

还有另一种更简洁的方法。

要检查对象属性是否未定义,可以使用严格相等 (===) 运算符将对象属性与 undefined 进行比较。 如果属性未定义,则严格相等运算符将返回 true,否则返回 false

const obj = {name: 'Tom'};

if (obj.age === undefined) {
  console.log('age 属性未定义');
} else {
  console.log('age 属性定义');
}

这种方法实现了相同的目标,但是我们直接检查属性是否等于 undefined,而不是检查其类型。

严格相等 (===) 运算符检查左侧和右侧的值是否相等,如果相等则返回 true,否则返回 false

这里有些例子。

console.log(undefined === undefined); // true
console.log(null === undefined); //  false
console.log('' === undefined); // false
console.log('5' === 5); // false

使用严格相等 (===) 运算符时,任何不同类型的值都不相等。

查看笔记

扫码一下
查看教程更方便