2014-12-10 2 views
0

У меня есть цикл while, который предназначен для проверки того, является ли число числом или что оно равно 50 или ниже. На данный момент он запускает цикл только в том случае, если он равен 51 или более; нет, если это NaN! Чтобы уточнить, он должен оставаться в цикле, а midday - выше 50 или NaN.В то время как цикл с двумя условиями проверяет только один

var midday = prompt("Enter midday temperature for day " + pn); 
midday = parseFloat(midday); 

while (Number.isNaN(midday) === false || midday > 50) { 
    //validate that the number is w/n an expected range. 
    //No minimum value as not expecting excessivly low input 
    alert("You entered a out out range or incorrect number") 

    var midday = prompt("Enter midday temperature for day " + pn); 
    midday = parseFloat(midday); 
}; 
+3

Ваша проверка NaN обратная. – Barmar

ответ

0

Попробуйте использовать это вместо Number.isNaN():

typeof(midday) === 'number' 

IsNaN() не проверяет, если переменная является числом, он проверяет, является ли переменная может быть преобразована в число тех, кто не является NaN, поэтому, если вы в конечном итоге со сценарием, как это:

isNaN('') 

вы бы получить, что «» не является NaN, разбивая код ...

Подробнее о: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

3

Я изменил условие а из Number.isNaN(midday) === false || midday > 50 в Number.isNaN(midday) || midday > 50.

Тест Number.isNaN(midday) === false || midday > 50 вернет true, если полдень - это число. Это означает, что все числа пройдут это условие.

Что вы хотите сделать, это проверить, если полуденный не является числом или, если его больше, чем 50

var midday = prompt("Enter midday temperature for day "); 
 
midday = parseFloat(midday); 
 

 
while (Number.isNaN(midday) || midday > 50) { 
 
//validate that the number is w/n an expected range. No minimum value as not expecting excessivly low input 
 
alert("You entered a out out range or incorrect number") 
 
var midday = prompt("Enter midday temperature for day "); 
 
midday = parseFloat(midday); 
 
};

+0

Привет, я попробовал это. Он по-прежнему остается в цикле, если число выше 50, а не NaN – crablab

+0

Чем удалить! Перед наном – Eyal

+0

Обновлен ответ в соответствии с вашими отзывами – Eyal

0

IsNaN() уже проверяет, если это не число -> Вы хотите это правда. Вам нужно только

while (Number.isNaN(midday) || midday > 50) 
+0

Спасибо :) Работает, но, очевидно, типof лучше использовать (см. Ответ выше!) – crablab

+0

Поскольку вы выполняли 'parseFloat()' в полдень, он содержит либо число, либо NaN, поэтому вы не можете столкнуться с указанной проблемой 'isNaN ('')' она может даже сломаться в вашем случае, так как 'typeof (NaN)' равно числу. – Hebrus

Смежные вопросы