July 18, 2022

Learn JavaScript #5. Операторы сравнения.

Содержание

Операторы сравнения

В JavaScript операторы записываются так:

  • Больше/меньше: a > b, a < b.
  • Больше/меньше или равно: a >= b, a <= b.
  • Равно: a == b. Для сравнения используется двойной знак равенства ==. Один знак равенства a = b означал бы присваивание.
  • Не равно. В математике обозначается символом ≠, но в JavaScript записывается как a != b.

Сравнение разных типов

При сравнении значений разных типов JavaScript приводит каждое из них к числу.

Например:

alert( '2' > 1 ); // true, string '2' становится числом 2
alert( '01' == 1 ); // true, string '01' становится числом 1

Логическое значение true становится 1, а false0.

Строгое сравнение

Оператор строгого равенства === проверяет равенство без приведения типов.

Другими словами, если a & b имеют разные типы, то проверка a === b немедленно возвращает false при попытке их преобразования.

Ещё есть оператор строгого неравенства !==, аналогичный !=.

Как избежать проблем

Помнить обо всех этих особенностях не обязательно, со временем они станут нам знакомы, но можно избежать проблем, если следовать надёжным правилам:

  • Относитесь очень осторожно к любому сравнению с undefined/null, кроме случае строгого равенства ===.
  • Не используется сравнения >= > < <= с переменными, которые могут принимать значения null/undefined, разве что вы полностью уверены в том, что делаете. Если переменная может принимать эти значения, то добавьте для них отдельные проверки.

Итого

  • Операторы сравнения возвращают значения логического типа
  • Строки сравниваются посимвольно в лексикографическом порядке
  • Значения разных типов при сравнении приводятся к числу. Исключением является сравнение с помощью операторов строгого равенства/неравенства
  • Значения null & undefined равны == друг другу и не равны любому другому значению
  • Будьте осторожны при использовании операторов сравнений вроде > & < с переменными, которые могут принимать значения null/undefined. Хорошей идеей будет сделать отдельную проверку на null/undefined

Задачи

Каким будет результат этих выражений?

5 > 4 // true, потому что 5 больше 4

'ананас' > 'яблоко' // false, потому что а меньше, чем я

'2' > '12' // true, потому что идёт построковое сравнение и 2 больше 1

undefined == null // true, потому что равны друг другу и не равны другим

undefined === null // false, потому что строгое сравнение разных типов

null == 'n0\n' // false, потому что null равен только undefined

null === +'n0\n' // false, потому что идёт строгое сравнение разных типов 

Telegram-канал: unknown.dev