一:使用 in 操作符
简便方法
const car = { make: 'Audi', model: 'Corolla' };
console.log('make' in car);
console.log('year' in car);
make in car 返回 true,因为 make 是 car 对象的属性。而 year 返回 false,因为 year 不存在于 car 对象中
原型链方法
function Vehicle() {
this.make = 'Audi';
}
Vehicle.prototype.model = 'Corolla';
const myCar = new Vehicle();
console.log('model' in myCar);
虽然 model 并不是 myCar 对象本身的属性,而是定义在其原型上的属性,in 操作符仍然返回 true。这是因为 in 操作符会遍历整个原型链进行检查。
二:使用 hasOwnProperty 方法
hasOwnProperty 方法,这是一个只检查对象自身属性的方法,不会考虑原型链上的属性
const person = { name: 'Alice', age: 30 };
console.log(person.hasOwnProperty('name'));
console.log(person.hasOwnProperty('gender'));
person.hasOwnProperty(‘name’) 返回 true,因为 name 是 person 对象的直接属性。而 gender 返回 false,因为它不在 person 对象中
原型链方法
function Animal() {
this.type = 'Dog';
}
Animal.prototype.legs = 4;
const myPet = new Animal();
console.log(myPet.hasOwnProperty('legs'));
legs 属性在 Animal 的原型上,而不是在 myPet 对象本身,因此 hasOwnProperty 返回 false。这种方法非常适合在需要精确判断对象自身属性时使用,避免原型链的干扰
三:使用三元操作符结合 undefined 进行精确检查
const book = { title: 'JavaScript Essentials', author: 'John Doe' };
console.log(book.pages !== undefined ? true : false);
console.log(book.title !== undefined ? true : false);
pages 属性不存在,因此返回 false。而 title 属性存在,因此返回 true。这种方法的优势在于它可以精确判断属性是否存在,特别是在你不确定属性是否被定义时