for...in - Цикл, используемый для перечисления свойств объекта
for...in - Цикл, используемый для перечисления свойств объекта
for...in
Цикл, используемый для перечисления свойств объекта.
Синтаксис:
for (var thisProp in object) { statements // Предложения обычно используют thisProp}
Вместо повторения серии предложений, пока заданное проверочное выражение не даст значения false, цикл for-in осуществляется по одной итерации для каждого свойства для заданного объекта.
Предложения for-in не требуют явного обновляющего предложения, поскольку число итераций цикла определяется числом свойств рассматриваемого объекта.
Предложения statements выполняются по одному разу для каждого свойства object;
На каждой итерации цикла переменная thisProp временно хранит строку, которая содержит имя свойства объекта, перечисляемого в данный момент. Это значение строки можно использовать во время каждой итерации, чтобы получить доступ к каждому свойству и обработать его.
Простейшим примером цикла for-in является сценарий, который перечисляет свойства объекта.
Примеры:
Создание объекта, а затем перечисление по пунктам его свойств с помощью цикла for-in
var ball = new Object();ball.radius = 12;ball.color = "red";ball.style = "beach";for (var prop in ball) { trace("balls has the property " + prop);}
Пример выведет следующее
balls has the property style balls has the property color balls has the property radius
Т.к. prop хранит имена свойств ball как строки, для извлечения значений этих свойств можно использовать prop с оператором []:
for (var prop in ball) { trace("balls." + prop + " is " + ball[prop]);}
Пример выведет:
ball.style is beach ball.color is red ball.radius is 12
Стоит обратить внимание, что свойства объекта, просматриваемые в цикле for-in, нумеруются в непредсказуемом порядке. Кроме того, предложения for-in не всегда перечисляют все свойства объекта. Если объект определен пользователем, перечисляются все свойства, включая унаследованные.
Но некоторые свойства встроенных объектов предложением for-in пропускаются. Например, этим циклом не перечисляются методы встроенных объектов. Если вы хотите использовать предложение for-in для работы со свойствами встроенного объекта, сначала создайте проверочный цикл для определения доступных свойств объекта.
Извлечение значений свойств с помощью цикла for-in предоставляет также отличную возможность обнаружения клипов, присутствующих на временной диаграмме.
Пример: Заполнение массива динамически идентифицируемыми клипами
var childClip = new Array();var childClipCount = 0;for(i in _root) { thisItem = _root[i]; if(typeof thisItem == "movieclip") { // Обратите внимание на постфиксный оператор инкрементирования childClip[childClipCount++] = thisItem; }}// После заполнения массива можно использовать его// для обработки клипов, которые в нем находятся// Поместить первый клип у левого края рабочего столаchildClip[0]._x = 0// Поместить второй клип у верхнего края рабочего столаchildClip[1]._y = 0
В приведенном примере при использовании в предложении for-in функция typeof дает удобный способ нахождения всех экземпляров клипа на временной диаграмме.
Когда клипы определены, их можно присвоить массиву для проведения программной обработки.
Цикл for-in также можно использовать для извлечения элементов массива. В этом случае цикл примет вид:
for (var thisElement in array) { statements;}
Пример: Перечисление элементов массива
var myArr = [123, 234, 345, 456];for( var elem in myArr) { trace(myArr[elem]);}
Совместимость:
Используется с 5-ой версии Flash