1.in 运算符
语法:属性 in 对象;
返回值:Boolean
// 内置对象
console.log("PI" in Math);
// 返回true
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log("make" in carInfo);
// 返回true// in右操作数必须是一个对象值。例如,你可以指定使用String构造函数创建的字符串,但不能指定字符串文字。
let str = new String("javascript");
console.log("length" in str);
// 返回true
str = "I is string";
console.log("length" in str);
// 报错:Cannot use 'in' operator to search for 'length' in ……// 只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
carInfo.make = undefined;
console.log("make" in carInfo);
// 返回true// 如果一个属性是从原型链上继承来的,in 运算符也会返回 true。
console.log("toString" in {});
// 返回true
【JS如何判断对象是否包含某个属性】注意:
(1)如果指定的属性在指定的对象或其原型链中,则 in 运算符 返回true。
(2)可以判断内置对象上的属性。
(3)使用 delete 运算符删除了一个属性,则 in 运算符对所删除属性返回 false。
(4)将一个属性的值赋值为 undefined,而没有删除它,则 in 运算仍然会返回true。
(5)对于字符串的属性也可以判断,只是必须是字符串对象 new String() 创建的字符串。
2.对象.hasOwnProperty('属性')
语法:对象.hasOwnProperty('属性');
返回值:Boolean
使用场景:只判断自身属性
提醒:和原型没关系 ,不会查找原型上的属性
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log(obj.hasOwnProperty('make'));
//true
console.log(obj.hasOwnProperty('model'));
// true
console.log(obj.hasOwnProperty('price'));
// false
console.log(obj.hasOwnProperty('toString'));
// false// 内置对象
console.log(Math.hasOwnProperty('PI'));
// true
3.点( . )或者方括号( [ ] )
语法: obj.属性 != undefined 或 obj['属性'] != undefined
返回值:Boolean
提醒1:可以查找原型上的属性
提醒2:不能用在对象的属性值存在,属性值为 undefined 的场景下。
// 自定义对象
let carInfo = { make: "Honda", model: "Accord", year: 2020 };
console.log(obj.make != undefined));
//true
console.log(obj.['model'] != undefined);
// true
console.log(obj.price != undefined);
// false// 内置对象