对象中是否包含某个属性

1、使用“!==”进行判断,该方法可以判断继承来的属性。

let obj = { m: 2 };
obj.m !== undefined;             // true 有m属性
obj.n !== undefined;             // false 无n属性
obj.toString !== undefined;      // true 从Object继承toString属性

2、使用 in 运算符,in 的语法是: attr in obj , 同样,该表达式也返回一个布尔值。

let obj = { m: 2 };
'm' in obj;             // true
'n' in obj;             // false
'toString' in obj;      // true

in运算符语法很简单,效果跟undefined是相同的,与undefined不同的是,in可以区分存在但值为undefined的属性。话不多说,看代码:

let obj = {m: undefined };
obj.m !== undefined;            // false
'm' in obj;                     // true

可以看出如果属性的值为undefined的时候,使用 !== 的方法就不奏效了,所以在工作中需要注意一下这一块。

3、对象的 hasOwnProperty() 方法也可以检测指定属性名是否在对象内,同样返回是布尔值, 当检测属性为自有属性(非继承)的时候返回true。

let obj = { m: 1, abc: 2 };
let a = 'a';
let b = 'bc';
obj.hasOwnProperty('m');               // true 包含
obj.hasOwnProperty('n');               // false 不包含
obj.hasOwnProperty('toString');        // false 继承属性
obj.hasOwnProperty(a + b);             // true 判断的是属性abc

in 运算符和 hasOwnProperty() 的区别就在于 in 运算符可以判断来自继承的属性,而hasOwnProperty() 不能。针对这一点在工作中加以运用还是很有帮助的。

4、propertyIsEnumerable() 是hasOwnProperty() 的增强版,这个方法的用法与hasOwnProperty()相同,但当检测属性是自有属性(非继承)且这个属性是可枚举的,才会返回true。

那么什么是可枚举属性?通俗的讲就是可以通过for...in遍历出来的属性就是可枚举属性。通常由JS代码创建出来的属性都是可枚举的。看一下代码也许更方便理解:

let obj = Object.create({m: 2});                   // 通过create()创建一个继承了X属性的对象obj
obj.propertyIsEnumerable('m');                     // false m是继承属性
obj.n= 1;                                         // 给obj添加一个自有可枚举属性n
obj.propertyIsEnumerable('n');                     // true
Object.prototype.propertyIsEnumerable('toString'); // false 不可枚举

这个四种方法,都可以判断出对象是否包含某个属性,根据需要采用不同的方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容