今天在使用for in循环的时候莫名其妙出现了一些东西,百度半天也不知道啥情况,后来想了想 是不是for in循环才会出现这个问题,照着这个方向又搜了一遍,果然,就是for in循环有一点坑
因为之前的代码里写了个
Array.prototype.uniq = function () {
return [...new Set(this)]
}
也就是一道牛客网的数组去重的解法,没想到这个会导致我后面的代码也跟着出问题了
我本只是在做另一道题,颜色进制转换,结果,在对数组进行遍历打印的时候,就莫名其妙打印出了一个uniq,这货哪来的啊,害我找半天才知道是上面自己写的(别问我为啥才发现,只顾着浏览器端的显示结果了)
不过也还行,又登记了一个知识点
for in循环会把原型链中的属性和方法一起遍历出来
解决方法很简单:
换个遍历方式呗 使用 for of循环
在廖雪峰老师的教程里,有这么一句话
for ... in
循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array
数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
综上所述
for in循环不太好用,会把被遍历对象的属性方法都遍历出来,原型链里的属性方法也会被遍历出来,换成for of吧