JS如何判断对象是否包含某个属性

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// 内置对象

    推荐阅读