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)
С этой темой смотрят: