如何判断一个属性是否存在

在js中如何判断一个属性是否存在?首先可能会想到的是,如果一个属性值不存在则不存在该属性,即:

const hasPropetry(obj,key) {
    return obj[key] != undefined
}

这种方式是不可行的,如果一个对象为obj = { a: undefined } ,此时应当返回true,但是此时函数返回的为false。

那么为了解决上述问题,又有可能想到如下办法:

const hasPropetry(obj,key) {
    return Object.keys(obj).includes(key)
}

此时若有一个对象:

const obj = {a:1}
Object.defineProperty(obj,'b',{
    enumerable: false,
    value:2
})

那么此时函数又无法遍历不可枚举的b属性了,此时应该返回ture,但是此时函数返回的为false。

那么这个时候,又会想到一个方法,hasOwnProperty() 方法返回一个布尔值,表示对象自有属性(而不是继承来的属性)中是否具有指定的属性。

如果指定的对象自身有指定的属性,则静态方法 Object.hasOwn() 返回 true。如果属性是继承的或者不存在,该方法返回 false

Object.hasOwn() 旨在取代 Object.prototype.hasOwnProperty()

此时函数写做:

const hasPropetry(obj,key) {
    return obj.hasOwnProperty(key)
}

此时却也无法访问原型上的属性,故此时可以用:

const hasPropetry(obj,key) {
    return key in obj
}

此时in可以判断一个对象是否含有该属性,且会判断其原型上是否存在该属性。

如果是Set或者是Map结构,可以用has()方法判断是否存在该属性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值