如图红框里面的代码,使用了for...in循环_qs的键名,为什么还要去判断_qs是否有这个属性,这样做有什么用意吗。
如图红框里面的代码,使用了for...in循环_qs的键名,为什么还要去判断_qs是否有这个属性,这样做有什么用意吗。
哎……同学,你仔细看看文档里对于for..in..
和hasOwnProperty
对于键的区别在哪里不就知道了吗?
for..in..
Object.prototype.hasOwnProperty()
for..in..
里面都专门指出来了:
循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。
如果你只要考虑对象本身的属性,而不是它的原型,那么使用
getOwnPropertyNames()
或执行hasOwnProperty()
来确定某属性是否是对象本身的属性(也能使用propertyIsEnumerable
)。或者,如果你知道不会有任何外部代码干扰,您可以使用检查方法扩展内置原型。
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
3 回答2.8k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
了解hasOwnProperty讲解mdn就知道了,是为了防止遍历到了对象或者数组的继承属性,也就是遍历的属性不是在
_qs
上,而是_qs
原型链上的属性,这也是eslint
支持的规则,for in
需要和hasOwnProperty
一起使用。