对于对象属性检测,我应该使用'在'或者'hasOwnProperty'
For object property detection, should I use 'in' or 'hasOwnProperty'?
我刚刚读到一篇文章,建议使用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
。
相关文章:
- hasOwnProperty-即使有属性,也不会显示属性
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- 在Node.js中,我在哪里可以看到JavaScript方法的源代码,例如hasOwnProperty
- 为什么使用 Object.prototype.hasOwnProperty.call(myObj, prop) 而不是
- hasOwnProperty 在对照父对象属性进行检查时返回 true
- javascript输出true中的hasOwnProperty方法
- hasOwnProperty在For in循环中总是返回False
- 什么是hasOwnProperty和angularjs中的push
- 窗口对象通过对象类型测试,但 hasOwnProperty 导致错误
- 有没有办法从某人更改Object.prototype.hasOwnProperty中恢复
- JQuery 或 Underscore 等同于 JavaScript 的 hasOwnProperty
- hasOwnProperty 在 FF 中返回 false
- JavaScript 在 Selectize createFilter 中存在 hasOwnProperty 的问题
- 通过hasOwnProperty获取文件属性
- Getting Object.prototype.hasOwnProperty() key
- .hasOwnProperty('getComputedStyle') false in IE 11
- 在这个特定的例子中,为什么作者在for中使用if.hasOwnProperty..循环模式
- obj.hasOwnProperty(key)vs使用obj[key]直接引用
- 为什么obj.hasOwnProperty('prop')返回false时obj.rop返回true