Ответ 1
Я думаю, что это работает. Просто будьте осторожны, попросите hasOwnProperty(key)
- потому что for
также будет радостно перебирать унаследованные свойства (и методы, которые являются просто свойствами со значениями функций).
Также: http://www.w3schools.com/js/js_loop_for_in.asp говорит:
Примечание. Код в теле цикла for... in выполняется один раз для каждого свойства.
Также: https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in говорит:
A for... in loop выполняет итерации по свойствам объекта в произвольном порядке (более подробно о том, почему нельзя зависеть от кажущейся упорядоченности итерации, по крайней мере, в настройках кросс-браузера). Если свойство изменено на одной итерации, а затем посещено позднее, значение, выставленное циклом, будет его значением в это позднее время. Свойство, которое удаляется до его посещения, затем не будет посещаться позже. Свойства, добавленные к объекту, через который происходит итерация, могут быть либо посещены, либо опущены на итерации. В общем случае лучше не добавлять, изменять и не удалять свойства объекта во время итерации, кроме свойства, которое в настоящее время посещается; нет гарантии, будет ли добавлено добавленное свойство, будет ли измененное свойство посещено до или после его изменения, или будет ли удаленное свойство посещено до его удаления.
То, что я прочитал из этого, - если вы изменяете значения, отличные от текущего, то недетерминизм может укусить вас в задницу. Однако изменение текущего должно быть в порядке.