Иногда, в зависимости от условия, нужно выполнить различные действия. Для этого используется оператор if
.
Например:
Оператор if
Оператор if
(«если») получает условие, в примере выше это year != 2011
. Он вычисляет его, и если результат — true
, то выполняет команду.
Если нужно выполнить более одной команды — они оформляются блоком кода в фигурных скобках:
3 |
alert( '..и неправильно!' ); |
Рекомендуется использовать фигурные скобки всегда, даже когда команда одна. Это улучшает читаемость кода.
Преобразование к логическому типу
Оператор if (...)
вычисляет и преобразует выражение в скобках к логическому типу.
В логическом контексте число 0
, пустая строка ""
, null
и undefined
, а также NaN
являются false
, остальные значения — true
.
Например, такое условие никогда не выполнится:
… А такое — выполнится всегда:
Вычисление условия в проверке if (year != 2011)
может быть вынесено в отдельную переменную:
1 |
var cond = (year != 2011); |
Важность: 5
Решение
[Открыть задачу в новом окне]
Неверное условие, else
Необязательный блок else
(«иначе») выполняется, если условие неверно:
Несколько условий, else if
Бывает нужно проверить несколько вариантов условия. Для этого используется блок else if ...
. Например:
В примере выше JavaScript сначала проверит первое условие, если оно ложно — перейдет ко второму — и так далее, до последнего else
.
Важность: 2
Решение: tutorial/intro/ifelse_task2.html.
[Открыть задачу в новом окне]
Важность: 2
tutorial/intro/if_sign.html
[Открыть задачу в новом окне]
Важность: 3
Решение: tutorial/intro/ifelse_task.html.
Обратите внимание на дополнительные вертикальные отступы внутри if
. Они полезны для лучшей читаемости кода.
[Открыть задачу в новом окне]
Оператор вопросительный знак '?'
Иногда нужно в зависимости от условия присвоить переменную. Например:
Оператор вопросительный знак '?'
позволяет делать это короче и проще.
Он состоит из трех частей:
условие ? значение1 : значение2 |
Проверяется условие, затем если оно верно — возвращается значение1
, если неверно — значение2
, например:
access = (age > 14) ? true : false ; |
Оператор '?'
выполняется позже большинства других, в частности — позже сравнений, поэтому скобки можно не ставить:
access = age > 14 ? true : false ; |
.. Но когда скобки есть — код лучше читается. Так что рекомендуется их писать.
В данном случае можно было бы обойтись и без оператора '?'
, т.к. сравнение само по себе уже возвращает true/false
:
Вопросительный знак — единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два.
Поэтому его называют «тернарный оператор».
Важность: 5
result = (a + b < 4) ? 'Мало' : 'Много' ; |
[Открыть задачу в новом окне]
Несколько операторов '?'
Несколько операторов if..else
можно заменить последовательностью операторов '?'
. Например:
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычный if..else
!
Вопросительный знак проверяет сначала a == 1
, если верно — возвращает значение1
, если нет — идет проверять a == 2
. Если это верно — возвращает значение2
, иначе проверка a > 2
и значение3
.. Наконец, если ничего не верно, то значение4
.
Альтернативный вариант с if..else
:
Важность: 5
1 |
var message = (login == 'Вася' ) ? 'Привет' : |
2 |
(login == 'Директор' ) ? 'Здравствуйте' : |
3 |
(login == '' ) ? 'Нет логина' : |
[Открыть задачу в новом окне]
Нетрадиционное использование '?'
Иногда оператор вопросительный знак '?'
используют как замену if
:
Работает это так: в зависимости от условия, будет выполнена либо первая, либо вторая часть после'?'
.
Результат выполнения не присваивается в переменную, так что пропадет (впрочем, alert
ничего не возвращает).
Рекомендуется не использовать вопросительный знак таким образом.
Несмотря на то, что с виду такая запись короче if
, она является существенно менее читаемой.
Вот, для сравнения, то же самое с if
:
Комментарии
Оставить комментарий
Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)
Термины: Выполнение скриптов на стороне клиента JavaScript, jqvery, JS фреймворки (Frontend)