在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()方法判断是否存在该属性。