Почему while нагружает страницу js

В цикле проходит некоторая проверка, но до нужной пора break игнорируется, в чем причина?

var one_words = ['كِتَابُ', 'مِحْبَرَةُ', 'لَوْحُ', 'قَلَمُ', 'كُرَّاسُ', 'نَشَّافَة', 'مِسْطَرَة'];
random_num = Math.floor(Math.random() * one_words.length);
let i;

while (one_words[random_num] == '') {
        if (i > 30) {
            break;
        } else {
            random_num = Math.floor(Math.random() * one_words.length);
            i++;
        }
    }

Это отрывок кода, и в другом месте элементам массива приравнивается пустая строка

Иное решение:

while (one_words[random_num] == '' && i < 100)

Но в любом случае интересно, почему предыдущий код не получался?


Ответы (2 шт):

Автор решения: Vasily

Ваш код не работает впринципе. Посмотрите на условие, которое вы поставили для работы цикла while one_words[random_num] == "", как оно может сработать если в массиве one_words не содержится пустых строк?

Если Вы хотите что бы цикл работал, его условие должно возвращать true.

// скопировал сюда Ваш код, добавив вывод в консоль
// и заменил значения в массиве на латинские символы
// сейчас Вам должно быть видно
// что условие while не срабатывает
// а значение i остается неизменным 

const one_words = ["one", "two", "three", "four", "five"]  

let random_num = Math.floor(Math.random() * one_words.length)

let i = 0

while (one_words[random_num] === "") {

        console.log("in while")

        if (i > 30) {
            break
        } else {
            random_num = Math.floor(Math.random() * one_words.length)
            i++
        }
}

console.log(i)

Так же, для того что бы избежать возможных ошибок, всегда старитесь использовать проверку на строгое соответствие вместо приведения к типу.

→ Ссылка
Автор решения: eri
let i;

Тут в i будет undefined, а потом

i++

будет NaN и поэтому break не пройдет.

нужно инициализировать i так

let i = 0;
→ Ссылка