对于对象属性检测,我应该使用'in'还是'hasOwnProperty'?

时间:2013-08-03 22:44:48

标签: javascript

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

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

而不是:

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

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

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

我是否应该使用in代替hasOwnProperty,反之亦然?或者它只是一种风格选择?

1 个答案:

答案 0 :(得分:4)

hasOwnProperty上的MDN有所不同:

  

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

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