JavaScript 判断对象是否具有某属性的方法
方法1:.
或[]
符号
let test = {name: 'lei'} // 创建对象
test.name // 获取name属性值,返回:lei
test["name"] // 获取name属性值,返回:lei
test.age // 获取不存在的属性age,返回:undefined
test["toString"] // 获取原型上的属性,返回:toString() {[native code]}
test.val = undefined // 新增一个值为值为 undefined 的属性 val
test.val // 获取val属性值,返回:undefined
从示例可以发现,使用obj.x !== undefined
来判断 obj 对象是否存在 x 属性有一定局限性,即:如果 obj.x 的值为 undefined,则不能正确判断 Obj 对象是否有 x 属性
方法2:in
运算符
let test = {name: 'lei', val: undefined} // 创建对象
'name' in test // 返回:true
'val' in test // 返回:true
'toString' in test // 返回:true
'age' in test // 返回: false
从示例可以发现,与方法1不同,可以判断出值为 undefined 的属性是存在的,局限性是,不能区分对象本身属性和原型链的属性
方法3:hasOwnProperty
方法
let test = {name: 'lei', val: undefined} // 创建对象
test.hasOwnProperty('name') // 返回:true,是对象自身属性
test.hasOwnProperty('age') // 返回:false,属性不存在
test.hasOwnProperty('toString') // 返回:false,不是对象自身属性,是原型链属性
从示例可以发现,hasOwnProperty() 可以判断 对象自身属性,适用于对象自身属性判断的场景
注意:在ESLint规则中,禁用了 state.hasOwnProperty(key)
用法,需要修改为 Object.prototype.hasOwnProperty.call(state, key)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步