对于对象属性检测,我应该使用'在'或者'hasOwnProperty'

For object property detection, should I use 'in' or 'hasOwnProperty'?

本文关键字:hasOwnProperty 或者 我应该 于对象 对象 检测 属性      更新时间:2023-09-26

我刚刚读到一篇文章,建议使用in运算符进行浏览器功能和对象属性检测。给出的例子是使用:

if("geolocation" in navigator) {
    // Do some stuff
}

而不是:

if(navigator.geolocation) {
    // Do some stuff
}

然而,它没有提到hasOwnProperty,尽管以下代码似乎工作得很好:

if(navigator.hasOwnProperty('geolocation')) {
    // Do some stuff
}

是否存在应该使用in而不是hasOwnProperty的情况,反之亦然?还是仅仅是一种风格上的选择?

与hasOwnProperty上的MDN有区别:

object派生的每个对象都继承了hasOwnProperty方法。此方法可用于确定对象是否具有指定的属性为该对象的直接属性;与in不同运算符,此方法不会检查对象的原型链条

我的建议是,如果您创建了对象,那么大多数时候可以使用in或简单查找,但当有原型链时,请考虑您的选择。如果它是本机对象或其他您无法控制的对象,则使用hasOwnProperty