Массив можно запросто перебирать через for-in, если порядок не важен, а сам массив длинный и сильно разреженный. Ну, или если кроме индексов у массива есть другие свойства (мало ли)...
Object.prototype расширять можно, но возникает проблема контроля за именами. Объекты в js - это не словари, не хэши, не что-то там жёсткое, они не пусты и изначально что-то наследуют, просто стандартные наследуемые свойства для удобства исключены из перебора (как будто их нет), а имена всем известны. Наследуемые свойства будут видны у всех объектов, и обычные для объектов операции - перебор свойств, проверка наличия свойств, проверка наличия и типа значения, удаление и т.д., всё это может потребовать дополнительного алгоритма отсечения наследуемых свойств прописанных руками в Object.prototype. В принципе, если скрипт свой, то ничего страшного в этом нет, хуже когда скрипт чужой объединяется с твоим, и начинаются конфликты - ты перебор делаешь, а контроль в нём не предусмотрел, и понеслось. Где-то отсюда и растут ноги у идеи "не трогать Object.prototype".
В отличие от объектов массивы крайне редко используются, как "хэши", перебор индексов через for не затрагивает наследуемых свойств (если не обозвали их числами), расширение прототипа массивов не выходит за рамки своего типа в отличие от всепоглощающего Object, поэтому-то и совершенно спокойное отношение по поводу расширения Array.prototype. То же самое касается любых других отдельных типов объекта - String, Number...
|