判断对象是否有某个属性
话不多说,直接上干货:
1.使用in操作符
const obj = {
name: '张三',
age: 18
}
console.log('name' in obj)
console.log('gender' in obj)
2.使用hasOwnProperty方法
const obj = {
name: '张三',
age: 18
}
console.log(obj.hasOwnProperty('name'))
console.log(obj.hasOwnProperty('gender'))
3.使用Object.keys方法
const obj = {
name: '张三',
age: 18
}
console.log(Object.keys(obj).includes('name'))
console.log(Object.keys(obj).includes('gender'))
4.使用Object.getOwnPropertyNames方法
const obj = {
name: '张三',
age: 18
}
console.log(Object.getOwnPropertyNames(obj).includes('name'))
console.log(Object.getOwnPropertyNames(obj).includes('gender'))
5.使用Object.prototype.propertyIsEnumerable方法
const obj = {
name: '张三',
age: 18
}
console.log(obj.propertyIsEnumerable('name'))
console.log(obj.propertyIsEnumerable('gender'))
6.使用Object.hasOwn方法
const obj = {
name: '张三',
age: 18
}
console.log(Object.hasOwn(obj, 'toString'))
console.log(Object.hasOwn(obj, 'name'))
7.使用Object.entries方法
const obj = {
name: '张三',
age: 18
}
console.log(Object.entries(obj).some(([key]) => key === 'name'))
console.log(Object.entries(obj).some(([key]) => key === 'gender'))
8.使用Reflect.has方法
const obj = {
name: '张三',
age: 18
}
console.log(Reflect.has(obj, 'name'))
console.log(Reflect.has(obj, 'gender'))
这些方法面试时经常问,工作时经常用到。现代浏览器也都兼容。读者可以用以下代码自行验证。
const obj = {
name: '张三',
age: 18
}
console.log('1.==============in==============')
console.log('toString' in obj)
console.log('name' in obj)
console.log('2.==============hasOwnProperty==============')
console.log(obj.hasOwnProperty('toString'))
console.log(obj.hasOwnProperty('name'))
console.log('3.=============Object.keys==============')
console.log(Object.keys(obj))
console.log(Object.keys(obj).includes('name'))
console.log(Object.keys(obj).includes('gender'))
console.log(Object.keys(obj).includes('toString'))
console.log('4.==============Object.getOwnPropertyNames==============')
console.log(Object.getOwnPropertyNames(obj))
console.log(Object.getOwnPropertyNames(obj).includes('name'))
console.log(Object.getOwnPropertyNames(obj).includes('gender'))
console.log(Object.getOwnPropertyNames(obj).includes('toString'))
console.log('5.==============propertyIsEnumerable==============')
console.log(obj.propertyIsEnumerable('toString'))
console.log(obj.propertyIsEnumerable('name'))
console.log('6.==============Object.hasOwn==============')
console.log(Object.hasOwn(obj, 'toString'))
console.log(Object.hasOwn(obj, 'name'))
console.log('7.==============Object.entries==============')
console.log(Object.entries(obj).some(([key]) => key === 'name'))
console.log(Object.entries(obj).some(([key]) => key === 'aaa'))
console.log(Object.entries(obj).some(([key]) => key === 'toString'))
console.log('8.==============Reflect.has==============')
console.log(Reflect.has(obj, 'name'))
console.log(Reflect.has(obj, 'gender'))
console.log(Reflect.has(obj, 'toString'))
总结:这些方法都可以判断对象是否具有某个属性,但可以分为两种:
- 准确判断自身属性:
hasOwnProperty、propertyIsEnumerable、Object.keys、Object.getOwnPropertyNames、Object.hasOwn、Object.entries
- 判断自身或继承属性:
in、Reflect.has
最后,这篇文章有帮助到你,可以点个赞支持一下哈。