2010-10-19 2 views
1

Я хочу, чтобы проверить следующеенесколько логических операторов в JavaScript

1: Является ли Xa номер
2. Если х меньше 5 или больше 15, звуковое оповещение 3. Если все в порядке, CallME ()

var x = 10; 
if (isNaN(x) && ((x < 5) || (x > 15))) { 
alert('not allowed') 
} 
else 
{ 
callMe(); 
} 

Что я делаю неправильно?

ответ

3
var x = 10; 
if (isNaN(x) || (x < 5) || (x > 15)) { 
    alert('not allowed') 
} 
else 
{ 
    callMe(); 
} 

Таким образом, если x не является числом, вы переходите непосредственно к оповещению. Если это число, вы переходите к следующей проверке (это x < 5) и так далее.

+0

Простые и правильные. Когда 'x' не является числом, первое условие - True, и оно не будет проверять дополнительные условия сравнения. – eumiro

+0

место сверху..thanks! – Naomi

+0

Добро пожаловать :) –

1
var x = 10; 
if (isNaN(x) || (x < 5) || (x > 15)) { 
    alert('not allowed') 
} 
else 
{ 
    callMe(); 
} 
+0

спасибо за решение – Naomi

2

Все остальные ответы о & & против || верны, я просто хотел добавить еще одну вещь:

Функция isNaN() проверяет, является ли параметр постоянным NaN или нет. Он не проверяет, действительно ли параметр номер или нет. Таким образом:

isNaN(10) == false 
isNaN('stackoverflow') == false 
isNaN([1,2,3]) == false 
isNaN({ 'prop' : 'value'}) == false 
isNaN(NaN) == true 

Другими словами, вы не можете использовать его для проверки того, содержит ли данная переменная число или нет. Для этого я предлагаю сначала запустить переменную через parseInt() или parseFloat() в зависимости от того, какие значения вы там ожидаете. После этого проверьте для isNaN(), потому что эти функции возвращают только числа или NaN. Также это будет гарантировать, что если у вас есть числовая строка, то она также рассматривается как число.

+0

Я не пробовал все браузеры (и, возможно, браузеры изменили способ обработки isNaN с вашего ответа), но то, что вы говорите, неверно в Chrome 34: http://jsfiddle.net/ss5ja/ –

+0

@ GôTô - Интересно. Я не знаю, совершила ли я ошибку 4 года назад, или что-то действительно изменилось. Тем не менее, поведение функции может быть нечетным в некоторых других случаях: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN. –

+0

Да ... Не уверен, что считается лучшим способом заменить 'isNaN', но он не кажется действительно заслуживающим доверия! –

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