1. 使用 in 运算符
in 运算符可以检查对象是否包含指定的属性,无论该属性是自有属性还是继承属性。
javascript
const obj = { a: 1, b: 2 };
const hasProperty = (obj: Record<string, any>, prop: string): boolean => {
return prop in obj;
};
console.log(hasProperty(obj, 'a')); // true
console.log(hasProperty(obj, 'c')); // false
javascript
const obj = { name: 'Alice', age: 25 };
if ('name' in obj) {
console.log('obj has property "name"');
} else {
console.log('obj does not have property "name"');
}
in操作符:检查对象或其原型链上是否存在某个属性。
2. 使用 hasOwn() 方法
hasOwn() 方法只检查对象是否包含指定的自有属性,不包括继承属性。
javascript
const obj = { a: 1, b: 2 };
console.log(Object.hasOwn(obj, 'a')); // true
console.log(Object.hasOwn(obj, 'b')); // true
console.log(Object.hasOwn(obj, 'toString')); // false
hasOwn() 方法:检查对象自身是否存在某个属性。
3. 使用 typeof 操作符
typeof 操作符可以检查对象的某个属性是否存在且不是 undefined。
javascript
const obj = { name: 'Alice', age: 25 };
if (typeof obj.name !== 'undefined') {
console.log('obj has property "name"');
} else {
console.log('obj does not have property "name"');
}
typeof操作符 :检查属性是否存在且不是undefined。
4. 使用可选链操作符 ?.
可选链操作符 ?. 可以在访问深层嵌套属性时避免 undefined 或 null 引发的错误,并且可以用来判断属性是否存在。
javascript
const obj = { name: 'Alice', age: 25 };
if (obj?.name !== undefined) {
console.log('obj has property "name"');
} else {
console.log('obj does not have property "name"');
}
可选链操作符
?.:避免访问深层嵌套属性时引发的错误。
5. 使用 Object.keys 方法
Object.keys 方法返回一个包含对象自身所有可枚举属性的数组,然后可以通过 Array.prototype.includes 方法来检查属性是否存在。
javascript
const obj = { name: 'Alice', age: 25 };
if (Object.keys(obj).includes('name')) {
console.log('obj has property "name"');
} else {
console.log('obj does not have property "name"');
}
Object.keys方法 :结合Array.prototype.includes方法检查属性是否存在。