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的属性 | 否 | 是 | 是 | 是 |
是否可以判断 非自有属性 | 是 | 否 | 否 | 是 |
是否可以判断 不可枚举属性 | 是 | 否 | 是 | 是 |