- •Internet Explorer
- •Основные операторы
- •Арифметические операторы
- •Приоритет
- •Операторы сравнения и логические значения
- •Логические значения
- •Сравнение строк
- •Сравнение разных типов
- •Строгое равенство
- •Сравнение с null и undefined
- •Условные операторы: if, '?'
- •Оператор if
- •Преобразование к логическому типу
- •Неверное условие, else
- •Несколько условий, else if
- •Оператор вопросительный знак '?'
- •Несколько операторов '?'
- •Нетрадиционное использование '?'
- •Взаимодействие с пользователем: alert, prompt, confirm
- •Confirm
- •Особенности встроенных функций
Операторы сравнения и логические значения
Логические значения
Сравнение строк
Сравнение разных типов
Строгое равенство
Сравнение с null и undefined
Итого
В этом разделе мы познакомимся с операторами сравнения и с логическими значениями, которые такие операторы возвращают. Многие операторы сравнения знакомы нам со школы:
Больше/меньше: a > b, a < b.
Больше/меньше или равно: a >= b, a <= b.
Равно a == b. Для сравнения используется два символа равенства '='. Один символ a = b означал бы присваивание.
«Не равно». В школе он пишется как ≠, в JavaScript — знак равенства с восклицательным знаком перед ним !=.
Логические значения
Как и другие операторы, сравнение возвращает значение. Это значение имеет специальный логический тип.
Существует всего два логических значения:
true — имеет смысл «да», «верно», «истина».
false — означает «нет», «неверно», «ложь».
Например:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( 2 > 1 ); // true, верно |
2 |
alert( 2 == 1 ); // false, неверно |
3 |
alert( 2 != 1 ); // true |
Логические значения можно использовать и напрямую, присваивать переменным, работать с ними как с любыми другими:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
var a = true; // присвоили явно |
2 |
var b = 3 > 4; // false |
3 |
|
4 |
alert( b ); // false |
5 |
|
6 |
alert( a == b ); // (true == false) неверно, результат false |
Сравнение строк
Строки сравниваются побуквенно:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( 'Б' > 'А' ); // true |
Буквы сравниваются в алфавитном порядке. Какая буква в алфавите позже — та и больше.
Кодировка Unicode
Аналогом «алфавита» во внутреннем представлении строк служит кодировка, у каждого символа — свой номер (код). JavaScript использует кодировку Unicode. При этом сравниваются численные коды символов.
В кодировке Unicode обычно код у строчной буквы больше, чем у прописной, поэтому:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert('а' > 'Я'); // true, строчные буквы больше прописных |
Для корректного сравнения символы должны быть в одинаковом регистре.
Сравнение осуществляется как в телефонной книжке или в словаре. Сначала сравниваются первые буквы, потом вторые, и так далее, пока одна не будет больше другой.
Иными словами, больше — та строка, которая в телефонной книге была бы на большей странице.
Например:
Если первая буква одной строки больше — значит первая строка больше, независимо от остальных символов:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( 'Банан' > 'Аят' ); |
Если одинаковы — сравнение идёт дальше. Здесь оно дойдёт до третьей буквы:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( 'Вася' > 'Ваня' ); // true, т.к. 'с' > 'н' |
При этом любая буква больше отсутствия буквы:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( 'Привет' > 'Прив' ); // true, так как 'е' больше чем "ничего". |
Такое сравнение называется лексикографическим.
Обычно мы получаем значения от посетителя в виде строк. Например, prompt возвращает строку, которую ввел посетитель.
Числа, полученные таким образом, в виде строк сравнивать нельзя, результат будет неверен. Например:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( "2" > "14" ); // true, неверно, ведь 2 не больше 14 |
В примере выше 2 оказалось больше 14, потому что строки сравниваются посимвольно, а первый символ '2' больше '1'.
Правильно было бы преобразовать их к числу явным образом. Например, поставив перед ними +:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
1 |
alert( +"2" > +"14" ); // false, теперь правильно |