6种方法查找JS对象中是否包含某个变量

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;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')); // false

const 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); // true

const desc2 = Object.getOwnPropertyDescriptor(obj, 'c');
console.log(desc2 === undefined); // true

总结

  • 使用 in 运算符和 Reflect.has() 可以检测继承来的属性。
  • 使用 hasOwnProperty()Object.getOwnPropertyDescriptor() 只能检测对象自身的属性。
  • 使用 Object.keys()Object.getOwnPropertyNames() 可以获得所有属性的列表,然后进行进一步的检查。

根据你的具体需求选择合适的方法。

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是大剑师兰特

打赏一杯可口可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值