restify框架源码里面for..in循环出的key为什么还要使用hasOwnProperty

如图红框里面的代码,使用了for...in循环_qs的键名,为什么还要去判断_qs是否有这个属性,这样做有什么用意吗。

图片描述

阅读 2.6k
2 个回答

了解hasOwnProperty讲解mdn就知道了,是为了防止遍历到了对象或者数组的继承属性,也就是遍历的属性不是在_qs上,而是_qs原型链上的属性,这也是eslint支持的规则,for in需要和hasOwnProperty一起使用。

哎……同学,你仔细看看文档里对于for..in..hasOwnProperty对于键的区别在哪里不就知道了吗?

for..in..
Object.prototype.hasOwnProperty()


for..in..里面都专门指出来了:

循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。

如果你只要考虑对象本身的属性,而不是它的原型,那么使用getOwnPropertyNames()或执行hasOwnProperty()来确定某属性是否是对象本身的属性(也能使用propertyIsEnumerable)。或者,如果你知道不会有任何外部代码干扰,您可以使用检查方法扩展内置原型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题