2

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

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

而不是:

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

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

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

在某些情况下我应该使用in而不是hasOwnProperty反之亦然?或者它只是一种风格选择?

4

1 回答 1

4

与hasOwnProperty上的 MDN 有所不同:

从 Object 继承的每个对象都继承该hasOwnProperty方法。该方法可用于判断一个对象是否具有指定属性作为该对象的直接属性;与in 操作符不同,此方法不检查对象的原型链。

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

于 2013-08-03T22:46:34.667 回答