Какие циклы существуют в JavaScript?

«Какие циклы существуют в JavaScript?» — вопрос из категории JavaScript, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В JavaScript доступны следующие конструкции циклов, которые часто используются в тестовых скриптах (например, для обработки массивов данных или обхода DOM-элементов):

  1. for — классический цикл с счётчиком. Идеален, когда известно количество итераций.

    // Пример: Запуск теста для каждого из 5 пользователей
    const testUsers = ['user1', 'user2', 'user3', 'user4', 'user5'];
    for (let i = 0; i < testUsers.length; i++) {
        console.log(`Запускаю тест для пользователя: ${testUsers[i]}`);
        // Здесь может быть вызов тестовой функции
    }
  2. while — выполняет блок кода, пока условие истинно. Полезен при ожидании какого-либо условия (например, появления элемента на странице).

    // Пример: Ожидание появления элемента (упрощённо, без таймаута)
    let elementFound = false;
    let attempts = 0;
    while (!elementFound && attempts < 10) {
        elementFound = document.querySelector('.loading-indicator') === null;
        attempts++;
        // На практике здесь нужна пауза
    }
  3. do...while — гарантирует выполнение тела цикла хотя бы один раз перед проверкой условия.

    // Пример: Запуск минимум одного теста, даже если флаг изначально false
    let shouldRetry = false;
    do {
        console.log('Выполняю попытку подключения к тестовой БД...');
        shouldRetry = !checkDatabaseConnection(); // Функция возвращает true/false
    } while (shouldRetry);
  4. for...in — перебирает перечисляемые свойства объекта. В контексте тестирования может использоваться для обхода конфигурационных объектов.

    // Пример: Проверка всех полей в объекте конфигурации теста
    const testConfig = { env: 'staging', headless: true, timeout: 30000 };
    for (const key in testConfig) {
        console.log(`Параметр ${key} имеет значение: ${testConfig[key]}`);
    }
  5. for...of — перебирает итерируемые объекты (массивы, строки, Map, Set). Самый частый выбор для работы с коллекциями данных в тестах.

    // Пример: Обработка массива результатов тестов
    const testResults = [true, false, true, true];
    for (const result of testResults) {
        if (!result) {
            console.error('Обнаружен упавший тест!');
        }
    }

Для QA-инженера наиболее полезны for и for...of для работы с наборами тестовых данных, а while — для реализации различных ожиданий в автоматизированных сценариях.