请教比较两种(判断是否存在属性)的方法

SimGenius 2018-03-15 04:53:55
假设有一个对象

let person = {
name: 'someone',
age: 18
}

现在我要判断person是否具有name属性,可以通过两种方法判断:
第一种,用hasOwnProperty()

function hasProperty(obj, attr){
return person.hasOwnProperty(obj,attr)
}
hasProperty(person, 'name') //true

第二种,先取值,看是否为undefined

function hasProperty(obj, attr){
return obj[attr] !== undefined
}
hasProperty(person, 'name') //true


请问以上两种方式各有什么优缺点
...全文
340 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimGenius 2018-03-20
  • 打赏
  • 举报
回复
引用 3 楼 jslang 的回复:
obj.hasOwnProperty(attr)只能判断对象的直接属性,不能判断从 proto 对象上继承的属性。 attr in obj 可以判断从 proto 对象上继承的属性。 obj[attr] !== undefined 这种方法如果属性的值就是undefined ,也会判断成没有这个属性。
所以这三种方式综合一下判断最稳咯?
SimGenius 2018-03-18
  • 打赏
  • 举报
回复
目前想到的是如果Object被defineProperty,把get函数返回undefined,那么取值判断是否undefined的方法失效
天际的海浪 2018-03-18
  • 打赏
  • 举报
回复
obj.hasOwnProperty(attr)只能判断对象的直接属性,不能判断从 proto 对象上继承的属性。 attr in obj 可以判断从 proto 对象上继承的属性。 obj[attr] !== undefined 这种方法如果属性的值就是undefined ,也会判断成没有这个属性。
似梦飞花 2018-03-18
  • 打赏
  • 举报
回复
hasOwnProperty只能获得对象本身上是否有这个属性 原型上的返回false 第二种如果值为undefined就失败了
var d={
        __proto__:{
            c:2
        },
        a:1,
        d:undefined
    }
    console.log(d.hasOwnProperty('c'),d.d===undefined);
    console.log(d.c,'d' in d);

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧