Операторы отношения ECMAScript
- Предыдущая страница Добавочные операторы
- Следующая страница Операторы идентичности
Операторы отношения выполняют операции сравнения.Каждый оператор отношения возвращает логическое значение.
Обычный способ сравнения
Операторы отношения "меньше", "больше", "меньше или равно" и "больше или равно" выполняют сравнение двух чисел, которое аналогично арифметическому сравнению.
Каждый оператор отношения возвращает логическое значение:
var bResult1 = 2 > 1 //true var bResult2 = 2 < 1 //false
Однако, поведение операторов отношения для двух строк различается.Многие считают, что "меньше" означает "раньше в алфавитном порядке", а "больше" означает "позже в алфавитном порядке", но это не так.Для строк каждый символ первой строки сравнивается по коду с символом, занимающим соответствующее положение во второй строке. После выполнения этой операции сравнения возвращается логическое значение true или false.Проблема заключается в том, что коды больших букв всегда меньше кодов маленьких букв, что может привести к следующим ситуациям:
var bResult = "Blue" < "alpha"; alert(bResult); //вывод true
В приведенном примере строка "Blue" меньше "alpha", потому что код символа B равен 66, а код символа a равен 97.Чтобы强制得到真正的字母顺序比较的结果,необходимо преобразовать два числа в одну и ту же форму大小的 букв (полностью заглавные или полностью строчные) и затем сравнить их:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); // Вывод false
Преобразование обоих операндов в нижний регистр гарантирует правильное определение того, что "alpha" расположено в алфавитном порядке перед "Blue".
Сравнение цифр и строк
Другая сложная ситуация возникает при сравнении двух чисел в строковом формате, например:
var bResult = "25" < "3"; alert(bResult); // Вывод "true"
Этот код сравнивает строки "25" и "3". Оба операнда являются строками, поэтому сравниваются их коды символов (код символа "2" равен 50, код символа "3" равен 51).
Но что если один из операндов является числом, то результат становится интересным:
var bResult = "25" < 3; alert(bResult); // Вывод "false"
Здесь, строка "25" будет преобразована в число 25 и сравнена с числом 3, результат не удивителен.
Когда сравнивается цифра и строка, ECMAScript всегда преобразует строку в число и сравнивает их по числовому порядку.
Но что, если строка не может быть преобразована в номер? Рассмотрим следующий пример:
var bResult = "a" < 3; alert(bResult);
Можете ли вы предсказать, что выведет этот код? Символ "a" не может быть преобразован в значимый номер. Однако, если применить к нему метод parseInt(), будет возвращено NaN. В соответствии с правилами, любая операция отношения, содержащая NaN, должна возвращать false, поэтому этот код также выводит false:
var bResult = "a" >= 3; alert(bResult);
Обычно, если результат операции сравнения двух значений меньше, то результат операции больше или равен должен быть истинным, но если какое-то значение равно NaN, то это не так.
- Предыдущая страница Добавочные операторы
- Следующая страница Операторы идентичности