TransWikia.com

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

Stack Overflow на русском Asked on December 2, 2021

В цикле проходит некоторая проверка, но до нужной пора 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 Answers

let i;

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

i++

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

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

let i = 0;

Answered by eri on December 2, 2021

Ваш код не работает впринципе. Посмотрите на условие, которое вы поставили для работы цикла 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)

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

Answered by Vasily on December 2, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP