★ wanayoo — archive 1999 https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/for...ofNouvelle recherche | Portail wanayoo

Check out Firefox Developer Edition, the first browser built for developers like you. http://mzl.la/112VrtT

mozilla
Your Search Results

    for...of

    This article is in need of an editorial review.

    Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
    Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

    Сводка

    Оператор for...of выполняет цикл обхода итерируемых объектов (включая ArrayMap, Set, объект аргументов и подобных), вызывая на каждом шаге итерации операторы для каждого значения из различных свойств объекта.

    Синтаксис

    for (переменная of объект)
      оператор
    
    переменная
    На каждом шаге итерации значение переменной присваивается новому свойству объекта.
    объект
    Объект, свойства которого обходятся во время выполнения цикла.

    Примеры

    Отличия for...of и for...in

    Следующий пример показывает различия циклов for...of и for...in. В то время как for...in обходит имена свойств, for...of выполняет обход значений свойств:

    let arr = [ 3, 5, 7 ];
    arr.foo = "hello";
    
    for (let i in arr) {
       console.log(i); // выведет "0", "1", "2", "foo"
    }
    
    for (let i of arr) {
       console.log(i); // выведет "3", "5", "7"
    }
    

    Использование Array.prototype.forEach()

    Для получения значений подобно циклу for...of, вы также можете использовать метод Array.prototype.forEach():

    let arr = [ 3, 5, 7 ];
    arr.foo = "hello";
    
    arr.forEach(function (element, index) {
        console.log(element); // выведет "3", "5", "7"
        console.log(index);   // выведет "0", "1", "2"
    });
    
    // или при помощи Object.keys()
    
    Object.keys(arr).forEach(function (element, index) {
        console.log(arr[element]); // выведет "3", "5", "7", "hello"
        console.log(arr[index]);   // выведет "3", "5", "7"
    });

    Обход DOM коллекций

    Обход DOM коллекций наподобие NodeList: следующий пример добавляет класс read параграфам, являющимся непосредственным потомкам статей:

    // Примечание: работает только на платформах, где
    // реализован NodeList.prototype[Symbol.iterator]
    let articleParagraphs = document.querySelectorAll("article > p");
    
    for (let paragraph of articleParagraphs) {
      paragraph.classList.add("read");
    }
    

    Обход генераторов

    Вы можете выполнять обход генераторов:

    function* fibonacci() { // функция-генератор
        let [prev, curr] = [0, 1];
        for (;;) {
            [prev, curr] = [curr, prev + curr];
            yield curr;
        }
    }
    
    for (let n of fibonacci()) {
        // ограничивает последовательность на 1000
        if (n > 1000)
            break;
        print(n);
    }
    

    Спецификации

    Спефицикация Статус Комментарий
    ECMAScript 6 (ECMA-262)
    Определение 'for...of statement' в этой спецификации.
    Черновик Изначальное опеределение.

    Совместимость с браузерами

    Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Базовая поддержка 29[1]
    38
    13 (13) Не поддерживается 25 7.1
    Возможность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Базовая поддержка ? 29[1]
    38
    13.0 (13) ? ? iOS 8

    [1] Функция доступна при настройке. В chrome://flags, активируйте “Enable Experimental JavaScript”.

    Смотрите также

    • for each...in - подобный оператор, обходящий значения свойств объекта, а не имена свойств (устарел).
    • Array.prototype.forEach()

    Метки документа и участники

    На данную страницу внесли свой вклад: dtretyakov, SphinxKnight
    Обновлялась последний раз: SphinxKnight,
    Скрыть боковую панель