for..in
Перебрать свойства объекта, для каждого свойства выполнить заданный код
Аргументы
- property
- Переменная, которой последовательно присваиваются названия свойств объекта. Может быть объявлена при помощи
var
, но не будет при этом локальной для цикла - object
- Объект, свойства которого перебираются
- statement
- Блок или javascript-вызов для вызова на каждой итерации
Описание, примеры
Конструкция for..in
- единственный в javascript способ перебрать все свойства объекта.
Большинство свойств встроенных объектов javascript перебираться в цикле for..in
не будут, так как помечены специальным внутренним флагом DontEnum
.
Этот флаг нельзя получить или поменять.
Пример: встроенное свойство toString
10 | alert(a.toString === Object.prototype.toString) |
14 | alert( "Property name:" +p+ " value:" +a[p]) |
Порядок перечисления свойств не определен.
Поэтому, если во время итерации добавить свойство к объекту - цикл
может по нему пройти позже или не пройти никогда, в зависимости от того,
куда это новое свойство встанет во внутренней хэш-таблице
интерпретатора javascript.
При удалении свойства во время итерации - если цикл по нему еще не прошел, то он не пройдет в дальнейшем.
Перебор свойств, кроме унаследованных
Для перебора всех свойств объекта, кроме унаследованных, используется конструкция for..in
с дополнительной проверкой.
1 | for ( var prop in object) { |
3 | if (!object.hasOwnProperty(prop)) continue |
В следующем примере свойство print
участвовало бы в цикле, если бы там не было проверки.
Пример: пербор без унаследованных свойств
01 | Object.prototype.print = function () { |
09 | if (!a.hasOwnProperty(p)) continue |