【JS】判断对象中是否包含某属性

1. undefined

判断该属性的值是否为undefined

const obj = {
    
     a: 1 }
obj.a === undefined // false 存在
obj.b === undefined // true 不存在

但有不妥,如果值恰好为 undefined 则判断失败。

const obj = {
    
     a: undefined }
obj.a === undefined // true

2. Object.keys(obj).includes

const obj = {
    
     a: undefined }
Object.keys(obj).includes('a') // true 存在
Object.keys(obj).includes('b') // false 不存在

Object.keys() 获取对象 自有的、不可枚举的 属性,返回数组。所以需要判断 原型上的属性不可枚举的 属性,该方法就不合适了。

非自有属性:

const obj = {
    
    }
obj.__proto__.a = 1
Object.keys(obj).includes('a') // false 不存在

不可枚举:

const obj = {
    
    }
Object.defineProperty(obj,'a',{
    
     value: 1, enumerble: false }) // 不可枚举
Object.keys(obj).includes('a') // false 不存在

3. hasOwnProperty

判断对象自有属性,包括不可枚举属性

const obj = {
    
    }
Object.defineProperty(obj,'a',{
    
     value: 1, enumerble: false }) // 不可枚举
obj.hasOwnProperty('a') // true 存在

非自有属性仍无法判断

const obj = {
    
    }
obj.__proto__.a = 1
obj.hasOwnProperty('a') // false 不存在

4. in

判断属性是否在对象及原型上

const obj = {
    
    }
Object.defineProperty(obj,'a',{
    
     value: 1, enumerble: false })
'a' in obj // true 存在
const obj = {
    
    }
obj.__proto__.a = 1
'a' in obj // true 存在

总结

undefined Object.keys() hasOwnProperty in
是否可以判断 值为undefined的属性
是否可以判断 非自有属性
是否可以判断 不可枚举属性

猜你喜欢

转载自blog.csdn.net/owo_ovo/article/details/142914518