hasOwnProperty()用来干什么?
JavaScript中Object对象原型上的hasOwnProperty() 用来判断一个属性是定义在对象本身而不是继承自原型链
或者说
hasOwnProperty是 JavaScript 中唯一处理属性并且不会遍历原型链的方法
从上面可以看到可以通过hasOwnProperty方法查找对象本身的key,那为什么还要使用Object.prototype.hasOwnProperty.call()呢?
javascript没有将
hasOwnProperty作为一个敏感词
这就导致可能发生下面的事情:
或者:
那个我帅不帅的事情就不讨论了哈。 帅就完了!哈哈!
回归正题,咱们一起来看下Object.prototype.hasOwnProperty.call()的效果
从上面可以清晰的看到,Object.prototype.hasOwnProperty.call()这种方式,并不会被“帅不帅”所影响。
特殊情况 Object.create(null)
这样创建的Object没有任何特性,使用hasOwnProperty会报错。
总结:
- 不要轻易使用Object.prototype的方法,例如
hasOwnProperty,propertyIsEnumerable和isPrototypeOf方法,这些方法可能被对象自身的同名属性覆盖或者对象是个null对象。 - 如果一定要使用,可以使用
Object.prototype.hasOwnProperty.call()、Object.keys().includes()、in等其余方式进行替换,最大程度的保证程序不出bug!!!
不想加班!!!