还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。
No.内容链接1Openlayers 【入门教程】 - 【源代码+示例300+】 2Leaflet 【入门教程】 - 【源代码+图文示例 150+】 3Cesium 【入门教程】 - 【源代码+图文示例200+】 4MapboxGL【入门教程】 - 【源代码+图文示例150+】 5前端就业宝典 【面试题+详细答案 1000+】
文章目录
在JavaScript中,检查一个对象是否包含某个属性(变量)可以通过几种不同的方法实现。下面是一些常用的方法:
方法一:使用
in
运算符
in
运算符可以用来检测一个对象是否具有指定的属性名(无论该属性是直接定义在对象上还是继承来的)。
const obj ={a:1,b:2};
console.log('a'in obj);// true
console.log('c'in obj);// false
方法二:使用
hasOwnProperty()
方法
hasOwnProperty()
方法用来检测一个对象是否直接具有指定的属性名,不考虑继承链上的属性。
const obj ={a:1,b:2};
console.log(obj.hasOwnProperty('a'));// true
console.log(obj.hasOwnProperty('c'));// false
方法三:使用
Object.prototype.hasOwnProperty.call()
当需要检查一个继承来的属性是否存在时,或者当
this
上下文不正确时,可以使用
call()
或
apply()
方法来调用
hasOwnProperty
。
const obj = Object.create({c:3});
obj.a =1;
obj.b =2;
console.log(Object.prototype.hasOwnProperty.call(obj,'a'));// true
console.log(Object.prototype.hasOwnProperty.call(obj,'c'));// false
方法四:使用
Reflect.has()
Reflect.has()
方法类似于
in
运算符,但它返回一个布尔值指示对象是否有给定的属性键。
const obj ={a:1,b:2};
console.log(Reflect.has(obj,'a'));// true
console.log(Reflect.has(obj,'c'));// false
方法五:使用
Object.keys()
或
Object.getOwnPropertyNames()
如果你只需要检查一个或几个属性,并且不关心性能,你可以使用
Object.keys()
或
Object.getOwnPropertyNames()
来获取所有属性名,然后检查这些数组中是否包含你想要的属性名。
const obj ={a:1,b:2};const keys = Object.keys(obj);
console.log(keys.includes('a'));// true
console.log(keys.includes('c'));// falseconst ownKeys = Object.getOwnPropertyNames(obj);
console.log(ownKeys.includes('a'));// true
console.log(ownKeys.includes('c'));// false
方法六:使用
Object.getOwnPropertyDescriptor()
如果需要检查一个属性是否存在并且获取它的描述符,可以使用
Object.getOwnPropertyDescriptor()
。
const obj ={a:1,b:2};const desc = Object.getOwnPropertyDescriptor(obj,'a');
console.log(desc !==undefined);// trueconst desc2 = Object.getOwnPropertyDescriptor(obj,'c');
console.log(desc2 ===undefined);// true
总结
- 使用
in
运算符和Reflect.has()
可以检测继承来的属性。 - 使用
hasOwnProperty()
和Object.getOwnPropertyDescriptor()
只能检测对象自身的属性。 - 使用
Object.keys()
和Object.getOwnPropertyNames()
可以获得所有属性的列表,然后进行进一步的检查。
根据你的具体需求选择合适的方法。
版权归原作者 还是大剑师兰特 所有, 如有侵权,请联系我们删除。