Почему не стоит использовать for...in, for...of, for(airbnb linter)?
Потому что кто-то так решил и его голос имеет сильный вес. Ты всегда может отключить данное правило. 
Связано это с тем, что в некоторых браузерах все плохо с итераторами, а for..in итеррирует в добавок и свойства прототипа, что как-бы четко поясняется в документации, а полагаться на hasOwnProperty нельзя в некоторых случаях (не поясняется почему), наверно потому, что его могут переопределить для объекта, но его могут переопределить и для Object, и тогда все плохо. Либо недостаточная поддержка браузерами.
Резюмируя, нефиг итеррировать по свойствам объекта, для итеррации есть массивы. А свойства на то и свойства, чтоб к ним обращаться напрямую.
Потому что колбэк метода из прототипа массива проще тестировать. Лично для меня это не убедительный аргумент, чтобы отказаться от процедурных переборов полностью.