@evg34rozenber

Почему не выполняется условие в цикле?

function chooseOptExpenses() {
    for (let i = 0, c = 2; i < c; i++) {
        let expenses = prompt("Введите количество необязательных статей расходов в этом месяце", '');
        console.log(expenses);
        if (typeof (expenses) === isNaN && typeof (expenses) == null
            && expenses == "") {
            c++;
            alert("Введите количество расходов", '');
        } 
}
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 4
IonDen
@IonDen
JavaScript developer. IonDen.com
isNaN(expenses) // правильно
isNaN - это функция, а не тип.
Ответ написан
hzzzzl
@hzzzzl
typeof prompt('aaa') всегда будет 'string', там даже проверять ничего не надо
Ответ написан
@IlonMusk
доброе утро.

Вам ведь нужно убедиться, что введенное значение является числом?
Если так, тогда вам проще это условие и задать.

if (typeof +expenses !== 'number' ) {
//...
}
где "+" - это приведение к типу Number. Можно воспользоваться parseInt(n);

Теперь в принципе по логике:
Допустим, что ваше условие проверяет на тип NaN (а не функцию isNaN(n)) и typeof возвращает не строку, тогда хочу обратить внимание на логический оператор && (И), который при любом совпадении с условием вернет false, так как NaN !== null && (и) null !== 'пустая строка',
итак в каждом условии вы проверяете результат typeof (...) - то есть строку с типом данных отличных от строки (возвращаемую typeof )
Пропущена закрывающая тело функции фигурная скобка.

Как я понимаю, вы хотели вызвать последовательно и записать два значения переданных юзером, в этом случае можно обойтись без цикла.
Promise || условными операторами.
То есть при клике вы предлагаете записать значение, обрабатываете его(успешный случай и случай неудачный) и затем проверив сделан ли первый шаг, предлагаете еще раз записать уже второе значение и в новую переменную. Таким образом у вас 2 значения в разных переменных, которыми вы в последствии можете оперировать как вам нужно.
Ответ написан
Комментировать
@Karpion
Вообще, работать через алерты и промпты - так себе идея. Лучше делать это через формы ввода с полями.

На первый взгляд по логике - вместо && надо ставить || - попробуйте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы