Оператор вопросительный знак '?' Иногда нужно в зависимости от условия присвоить переменную. Например: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
01
| var access;
| 02
| var age = prompt('Сколько вам лет?', '');
|
05
| access = true;
| 06
| } else {
|
Оператор вопросительный знак '?' позволяет делать это короче и проще.
Он состоит из трех частей:
условие ? значение1 : значение2
| Проверяется условие, затем если оно верно — возвращается значение1 , если неверно — значение2, например:
access = (age > 14) ? true : false;
| Оператор '?' выполняется позже большинства других, в частности — позже сравнений, поэтому скобки можно не ставить:
access = age > 14 ? true : false;
| .. Но когда скобки есть — код лучше читается. Так что рекомендуется их писать.
В данном случае можно было бы обойтись и без оператора '?', т.к. сравнение само по себе уже возвращает true/false: «Тернарный оператор»
Вопросительный знак — единственный оператор, у которого есть аж три аргумента, в то время как у обычных операторов их один-два. Поэтому его называют «тернарный оператор».
Важность: 5
Перепишите if с использованием оператора '?': показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1
| if (a + b < 4) {
| 2
| result = 'Мало';
|
3
| } else {
| 4
| result = 'Много';
|
Решение
Решение
result = (a + b < 4) ? 'Мало' : 'Много';
| [Открыть задачу в новом окне]
Несколько операторов '?' Несколько операторов if..else можно заменить последовательностью операторов '?'. Например: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1
| var a = prompt('a?', 1);
| 2
|
|
3
| var res = (a == 1) ? 'значение1' :
| 4
| (a == 2) ? 'значение2' :
|
5
| (a > 2) ? 'значение3' :
| 6
| 'значение4';
|
Поначалу может быть сложно понять, что происходит. Однако, внимательно приглядевшись, мы замечаем, что это обычный if..else!
Вопросительный знак проверяет сначала a == 1, если верно — возвращает значение1, если нет — идет проверять a == 2. Если это верно — возвращает значение2, иначе проверка a > 2 и значение3.. Наконец, если ничего не верно, то значение4.
Альтернативный вариант с if..else: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
03
| if (a == 1) {
| 04
| res = 'значение1';
|
05
| } else if (a == 2) {
| 06
| res = 'значение2';
|
07
| } else if (a > 2) {
| 08
| res = 'значение3';
|
09
| } else {
| 10
| res = 'значение4';
|
Важность: 5
Перепишите if..else с использованием нескольких операторов '?'.
Для читаемости — оформляйте код в несколько строк. показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
03
| if (login == 'Вася') {
| 04
| message = 'Привет';
|
05
| } else if (login == 'Директор') {
| 06
| message = 'Здравствуйте';
|
07
| } else if (login == '') {
| 08
| message = 'Нет логина';
|
09
| } else {
| 10
| message = '';
|
Решение
Решение показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1
| var message = (login == 'Вася') ? 'Привет' :
| 2
| (login == 'Директор') ? 'Здравствуйте' :
|
3
| (login == '') ? 'Нет логина' :
| 4
| '';
| [Открыть задачу в новом окне]
|