for(k in { x: 1, y: 2 }) { ... }
k примет значения "x" и "y" в теле.
Поскольку массив является объектом с ключами, которые являются числами, в цикле for(k in [1, 2]) { ... } k пройдёт значения "0" и "1".
Однако, объект-массив содержит ещё некоторые поля, например, "length", который, однако, не проходит итератор. Если я правильно помню, в ES3 это было жестко вшито в семантику языка как исключение, а в ES5 это обыгрывается тем, у полей появились атрибуты, причём поле "length" имеет дескриптор enumerable.
В процитированном фрагменте говорится буквально следующее: слева от in не обязательно будет экземпляр Array, даже если у этого объекта есть поля "0", "1" и т.п., при этом могут быть и другие поля, которые имеют заранее неизвестные дескрипторы. И стоит быть готовым к тому, что k в цикле for(k in obj) {...} может принять строковое значение, которое нельзя привести к числу.