Меню

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

Оператор Тип оператора А О Типы значений
… < …
… <= …
… > …
… >= …
… == …
… != …
… === …
… !== …
Меньше чем
Меньше или равно
Больше чем
Больше или равно
Равно
Не равно
Строго равно
Строго не равно
слева направо
слева направо
слева направо
слева направо
слева направо
слева направо
слева направо
слева направо
2
2
2
2
2
2
2
2
число, число → булево
число, число → булево
число, число → булево
число, число → булево
любое, любое → булево
любое, любое → булево
любое, любое → булево
любое, любое → булево

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

Значения считаются равными:

  • Если оба значения являются null или undefined.
  • Если оба значения являются true или false.
  • Если оба значения являются числами с одним и тем набором цифр (0 и -0 равны).
  • Если оба значения являются строками и они содержат одни и те же 16-битные последовательности.
  • Если оба операнда ссылаются на один и тот же объект, массив или функцию.

Значения считаются не равными:

  • Если два значения имеют различные типы.
  • Если одно или оба значения являются NaN.
  • Если строки отличаются содержимым.
  • Если две строки выглядят одинаково, но содержат различные последовательности 16-битных значений.
  • Если оба операнда ссылаются на разные объекты, массивы или функции.

Если значения операндов равны оператор === возвращает true, если не равны – false:


alert('7' === 7);       // false
alert(null === null);   // true
alert((2 + 2) === 4);   // true
alert(0 === -0);        // true

Оператор == (равно) выполняет сравнение значений. Если значения операндов имеют разные типы, оператор выполняет неявное преобразование типов и затем пытается выполнить сравнение.

Преобразование типов выполняется по следующим правилам:

  • Если одно значение является числом, а другое – строкой, то строка преобразуется в число.
  • Если один из операндов имеет значение true, оно преобразуется в число 1, если значение false – в число 0.
  • Если значение ссылочного типа сравнивается с числом или строкой, оператор попытается преобразовать его к примитивному значению.

Значения считаются равными:

  • Если одно значение null, а другое undefined.
  • Если оба значения являются null или undefined.
  • Если оба значения являются true или false.
  • Если оба значения являются числами с одним и тем набором цифр (0 и -0 равны).
  • Если оба значения являются строками и они содержат одни и те же 16-битные последовательности.
  • Если оба операнда ссылаются на один и тот же объект, массив или функцию.

Значения считаются не равными:

  • Если одно или оба значения являются NaN.
  • Если строки отличаются содержимым.
  • Если две строки выглядят одинаково, но содержат различные последовательности 16-битных значений.
  • Если оба операнда ссылаются на разные объекты, массивы или функции.

alert(null == undefined);   // true
alert("123" == 123);        // true
alert(true == "1");         // true
alert(4 == 5);              // false

Операторы != (не равно) и !== (строго не равно) выполняют проверки, в точности противоположные операторам == и ===. Например, оператор != возвращает false, если два значения равны друг другу в том смысле, в каком они считаются равными оператором ==, и true в противном случае:


alert(4 != 3);      // true
alert("4" != 4);    // false
alert("4" !== 4);   // true

Оператор < (меньше) возвращает true, если значение левого операнда меньше, чем значение правого операнда, в противном случае он возвращает false:


alert(5 < 6);   // true
alert(5 < 4);   // false

Оператор > (больше) возвращает true, если значение левого операнда больше, чем значение правого операнда, в противном случае он возвращает false:


alert(5 > 3);   // true
alert(5 > 6);   // false

Оператор <= (меньше или равно) возвращает true, если значение левого операнда меньше или равно значению правого операнда, в противном случае он возвращает false:


alert(5 <= 6);   // true
alert(5 <= 5);   // true
alert(5 <= 4);   // false

Оператор >= (больше или равно) возвращает true, если значение левого операнда больше или равно значению правого операнда, в противном случае он возвращает false:


alert(5 >= 3);   // true
alert(5 >= 5);   // true
alert(3 >= 4);   // false

Код буквы в нижнем регистре всегда больше, чем код буквы в верхнем регистре. Код цифры находящейся в строке всегда меньше кода буквенного символа в любом регистре. Обычно, буква расположенная в алфавитном порядке раньше меньше, чем буква (в том же регистре) расположенная в алфавитном порядке после неё:


alert("a" > "Z");   // true
alert("9" < "a");   // true
alert("a" < "b");   // true
alert("23" < "3");  // true (код строкового символа "2" – 50, а код "3" – 51)