Операторы сравнения JavaScript: полное руководство

JavaScript - один из самых популярных языков программирования в мире. Операторы сравнения - важная часть любого языка, позволяющая сравнивать значения и принимать решения в программах.

Базовый синтаксис операторов сравнения

Существует несколько типов операторов сравнения в JavaScript:

  • Операторы равенства: ==, ===
  • Операторы неравенства: !=, !==
  • Операторы сравнения: >, <, >=, <=

Эти операторы позволяют сравнивать значения переменных и выражений в коде. Например:

let x = 5; let y = 10; x > y; // false x == 5; // true 

Операторы сравнения часто используются в условных конструкциях и циклах:

if (x > 10) { // код, который выполнится если х больше 10 } while (i < 10) { // код в цикле, пока i меньше 10 } 

Приоритет операторов сравнения выше, чем операторов присваивания, но ниже чем арифметических операторов. Поэтому выражения вида x = y > 5 будут вычисляться как (x = y) > 5.

Логические операторы для комбинирования условий

Часто одного оператора сравнения бывает недостаточно. Для построения сложных условий используются логические операторы:

  • Оператор И (&&) - возвращает true если оба выражения истинны
  • Оператор ИЛИ (||) - возвращает true если хотя бы одно выражение истинно
  • Отрицание с помощью оператора НЕ (!) - инвертирует булево значение

Эти операторы позволяют комбинировать простые условия в сложные логические выражения:

if (x > 5 && y < 10) { // и х больше 5, и у меньше 10 } if (x == 5 || y == 10) { // х равен 5 или у равен 10 } 

Приоритет у операторов такой же как в математике: сначала НЕ, потом И, потом ИЛИ. Например:

!x || y && z

будет интерпретироваться как (!x) || (y && z)

Особенности оператора равенства ==

Оператор равенства == в JavaScript обладает интересным поведением. В отличие от строгого равенства ===, обычный оператор равенства выполняет неявное преобразование типов перед сравнением.

Например, следующие выражения истинны:

"1" == 1 0 == false null == undefined [] == false 

Это связано с тем, что строка "1" преобразуется к числу 1, 0 и false к булевым значениям, а null и undefined к одному специальному значению.

Согласно спецификации JavaScript, оператор преобразует значения по следующим правилам перед сравнением:

null преобразуется к +0
undefined преобразуется к NaN
строка или число преобразуется к числу с помощью parseFloat()
объект или массив преобразуется к примитиву с помощью методов valueOf() и toString()

Такое поведение иногда приводит к неочевидным результатам:

'' == 0 // false '0' == 0 // true [] == '' // true [] == 0 // true [1] == 1 // true ['1'] == 1 // true 

Поэтому при использовании оператора == надо быть очень внимательным и помнить о возможном неявном преобразовании.

Оператор равенства == удобен, но может дать неожиданные результаты из-за преобразования типов. Для строгого сравнения значений без преобразований лучше использовать оператор ===

Строгое равенство === и глубокое сравнение объектов

В отличие от обычного равенства ==, оператор строгого равенства === не выполняет преобразования типов. Он сравнивает значения как есть и возвращает true только если операнды одного типа и равны по значению.

Например:

0 === false // false, разные типы undefined === null // false, строго не равны '1' === 1 // false, нет преобразования строки к числу [] === 0 // false, разные типы 

Также оператор === имеет специальное поведение для некоторых значений:

  • Отрицательный ноль -0 считается равным положительному нулю +0
  • Значение NaN не равно ничему, даже самому себе
  • Значения null и undefined строго равны друг другу и ничему больше

При сравнении объектов, включая массивы, оператор === проверяет ссылаются ли переменные на один и тот же объект в памяти.

Для глубокого сравнения объектов по значению (а не по ссылке) можно использовать функцию _.isEqual() из библиотеки lodash или написать собственную реализацию рекурсивного сравнения.

Поэтому рекомендуется по возможности избегать оператора == и использовать строгое сравнение === для предсказуемого поведения при сравнении значений и объектов в JavaScript.

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

При сравнении числовых значений в JavaScript также есть нюансы, о которых стоит помнить.

Во-первых, это различие между целыми (integer) и дробными числами (float). Целые числа сравниваются как математические целые значения, а для дробных чисел используется стандарт сравнения чисел с плавающей точкой IEEE 754.

Во-вторых, положительный ноль +0 и отрицательный -0 считаются равными при сравнении == и неравными при строгом сравнении ===.

 1 / +Infinity // +0 1 / -Infinity // -0 +0 === -0 // true +0 == -0 // true +0 > -0 // false 

Также существует специальное числовое значение NaN (Not a Number), которое возникает в результате некорректных математических операций. Оно не равно никакому числу, даже самому себе:

NaN === NaN // false NaN == NaN // false 

Поэтому при сравнении чисел стоит явно проверять на NaN отдельным условием с помощью функции Number.isNaN() или глобальной isNaN().

Логические операторы в JavaScript часто используются не только для комбинирования булевых условий, но и для более сложных вычислений.

Например, оператор ИЛИ || может выступать в качестве оператора условного присваивания значения по умолчанию:

let x = a || b; // присвоить х значение а, если а истинно, иначе значение b 

А оператор И && позволяет записывать условия в тернарном виде без использования тернарного оператора:

showMessage && alert(message); // сначала проверить условие showMessage, потом вызвать alert 

javascript: оператор равенства

Часто начинающие JavaScript-разработчики задают вопрос: "Какой оператор равенства лучше использовать - == или ===?"

Короткий ответ такой: для сравнения примитивных типов значений (числа, строки, булевы значения) лучше использовать оператор строгого равенства ===. А для специальных случаев приведения типов подходит ==.

Подробнее:

  • === сравнивает значения без преобразований, что делает поведение предсказуемым
  • == делает приведение типов, что иногда удобно, но может привести к ошибкам

Поэтому старайтесь по умолчанию использовать оператор ===. А оператор равенства == применяйте только в редких случаях, когда требуется именно приведение типов.

javascript для начинающих: примеры

Рассмотрим несколько простых примеров использования операторов сравнения на JavaScript, полезных для начинающих.

Проверка, что переменная definied и не равна null:

let x = 5; if (x !== null && x !== undefined) { // переменная x определена и инициализирована } 

Проверка, что значение в диапазоне от 0 до 100:

let n = Math.random() * 100; if (n >= 0 && n <= 100) { // диапазон значений 0..100 } 

Цравнение строк без учета регистра:

let language = 'JavaScript'; if (language.toLowerCase() === 'javascript') { alert('Верно!'); } 

Сравнение через оператор switch в js javascript

В JavaScript оператор switch тоже может использоваться для сравнения значений.

Например:

let x = 2; switch(x) { case 1: // код для x == 1 break; case 2: // код для x == 2 break; default: // код по умолчанию } 

Здесь переменная x последовательно сравнивается со значениями вариантов case с помощью строгого равенства. Как только находится совпадение, выполняется соответствующий код.

Такой способ удобен, когда нужно сравнить одну переменную с несколькими значениями и выполнить разный код в зависимости от результата.

Комментарии