JavaScript判断对象是否包含某个属性的几种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaScript判断对象是否包含某个属性的⼏种⽅法
1、最简单的⽅法,就是使⽤“!==”进⾏判断,这种⽅法在⼯作中很常见,可以看出该⽅法可以判断继承来的属性。
let obj = { x: 1 };
obj.x !== undefined; // true 有x属性
obj.y !== undefined; // false ⽆y属性
obj.toString !== undefined; // true 从Object继承toString属性
2、使⽤ in 运算符,in 的语法是: attr in obj ,同样,该表达式也返回⼀个布尔值。
let obj = { x: 1 };
'x' in obj; // true
'y' in obj; // false
'toString' in obj; // true
in运算符语法很简单,效果跟undefined是相同的,与undefined不同的是,in可以区分存在但值为undefined的属性。
话不多说,看代码:
let obj = { x: undefined };
obj.x !== undefined; // false
'x' in obj; // true
可以看出如果属性的值为undefined的时候,使⽤ !== 的⽅法就不奏效了,所以在⼯作中需要注意⼀下这⼀块。
3、对象的 hasOwnProperty() ⽅法也可以检测指定属性名是否在对象内,同样返回是布尔值,当检测属性为⾃有属性(⾮继承)的时候返回true。
let obj = { x: 1, abc: 2 };
let a = 'a';
let b = 'bc';
obj.hasOwnProperty('x'); // true 包含
obj.hasOwnProperty('y'); // 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({x: 1}); // 通过create()创建⼀个继承了X属性的对象obj
obj.propertyIsEnumerable('x'); // false x是继承属性
obj.y = 1; // 给obj添加⼀个⾃有可枚举属性y
obj.propertyIsEnumerable('y'); // true
Object.prototype.propertyIsEnumerable('toString'); // false 不可枚举
5、Object.keys(),它会返回⼀个对象⾃⾝的可枚举属性的名字,类型为⼀个数组。
let obj = { x: 1 };
Object.defineProperty(obj, 'test', {
value: 'testVal',
enumerable: false,
writable: true,
configurable: true
});
let arr = Object.keys(obj);
arr.includes('x'); // true
arr.includes('test'); //false
我们使⽤了ES5提供的Object.defineProperty()⽅法为person对象增加了⼀个不可枚举的名为 test 的属性,它的值为 ‘testVal’。
Object.keys()在获得了⼀个对象的可枚举属性之后,接下来的操作就变成了在数组中查找符合条件的元素。
在上述代码中我们⽤了数组内置的includes()⽅法,对于旧版浏览器你可能需要改⽤ indexOf()等⽅法。
以上五种⽅法,都可以判断出对象是否包含某个属性,⼯作中可以根据不同情况采⽤不同的⽅法。