ES2022新特性:Object.hasOwn()以及判断对象是否具有属性的6个方法

本文详细比较了JavaScript中Object.hasOwn()、hasOwnProperty()、in和Reflect.has()用于检查对象属性的方法,强调了它们的区别,包括原型链影响、适用场景和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Object.hasOwn() 主要是用来代替Object.prototype.hasOwnProperty(),提供了一个更简单的方法来检查对象是否具有特定的属性。

来看一下检查对象是否具有某属性的方法:

1. in操作符

'name' in {name:'hhh'}  // true

'name' in {}  //false

// 注意name一定是带引号的表示属性的,如果去掉引号name in {name:'hhh'}则是false

缺点是in会检查继承过来的属性

'valueOf' in {}
true
'toString' in {}
true

// 因为{}继承了Object.prototype.toString()方法

2. Reflect.has()

Reflect.has是ES2015新增的一个内置对象,提供了与JavaScript对象交互的方法。

判断一个对象是否存在某个属性,与in操作符的功能完全相同。

Reflect.has({name:"zhangsan"},"name") // true
Reflect.has({name:"zhangsan"},"age") // true

Reflect.has({},'toString')
true
Reflect.has({},'valueOf')
true

3. hasOwnProperty()

hasOwnProperty用来判断一个对象是否拥有特定的自身属性,可以判断一个属性是定义在对象本身而不是继承自原型链的。

通过对象字面量{}或构造函数法new Object()创建的对象都从Object.prototype继承了hasOwnProperty()

const o = {name:'zhangsan'}

o.hasOwnProperty('name') //true

o.hasOwnProperty('toString')
false

缺点:不支持Object.create(); 如果对象本身有一个‘hasOwnProperty’属性,将覆盖原型链上的Object.prototype.hasOwnProperty()。

const o = Object.create(null)
o.hasOwnProperty('name')

//会报错 Uncaught TypeError: o.hasOwnProperty is not a function

const o = Object.create({name:'11'})
o.hasOwnProperty('name')
false

4. Object.prototype.hasOwnProperty.call()

Object.prototype.hasOwnProperty.call(obj,propName)

const o = {name:'zhangsan'}

Object.prototype.hasOwnProperty.call(o,'name') //true

Object.prototype.hasOwnProperty.call(o,'toString')
false

5. Object.hasOwn()

用来代替Object.prototype.hasOwnProperty.call()

function hasOwn(obj,propName){

    return Object.prototype.hasOwnProperty.call(obj,propName)
}

6. Object.keys(obj).includes()

const o = {name:'zhangsan'}


Object.keys(o).includes('name') // true


Object.keys(o)
['name']

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值