Операторы сравнения сравнивают значения двух операндов и оценивают, является ли утверждение, которое они формируют, true или false . В следующем примере используется оператор строгого равенства ( === ) для сравнения двух операндов: выражения 2 + 2 и значения 4 . Поскольку результат выражения и числовое значение 4 одинаковы, это выражение имеет значение true :
2 + 2 === 4
> true
Тип принуждения и равенства
Двумя наиболее часто используемыми операторами сравнения являются == для свободного равенства и === для строгого равенства. == выполняет свободное сравнение двух значений, принуждая операнды к совпадающим типам данных, если это возможно. Например, 2 == "2" возвращает true , даже если сравнение выполняется между числовым значением и строковым значением.
2 == 2
> true
2 == "2"
> true
То же самое относится и к != , который возвращает true только в том случае, если сравниваемые операнды не являются примерно равными.
2 != 3
> true
2 != "2"
> false
Строгие сравнения с использованием === или !== не выполняют приведение типов. Чтобы строгое сравнение дало результат true , сравниваемые значения должны иметь один и тот же тип данных. По этой причине 2 == "2" возвращает true , а 2 === "2" возвращает false :
2 === 3
> false
2 === "2"
> false
Чтобы устранить любую двусмысленность, которая может возникнуть в результате автоматического приведения, используйте === везде, где это возможно.
| Оператор | Описание | Использование | Результат |
|---|---|---|---|
| === | Строго равно | 2 === 2 | истинный |
| !== | Не строго равны | 2 !== "2" | истинный |
| == | Равный (или «приблизительно равный») | 2 == "2" | истинный |
| != | Не равно | 2 != "3" | истинный |
| > | Больше, чем | 3 > 2 | истинный |
| >= | Больше или равно | 2 >= 2 | истинный |
| < | Меньше, чем | 2 < 3 | истинный |
| <= | Меньше или равно | 2 <= 3 | истинный |
Правда и ложь
Все значения в JavaScript неявно имеют true или false и могут быть приведены к соответствующему логическому значению, например, с помощью компаратора «свободного равенства». Ограниченный набор значений приводит к false :
-
0 -
null -
undefined -
NaN - Пустая строка (
"")
Все остальные значения приводятся к true , включая любую строку, содержащую один или несколько символов и все ненулевые числа. Их обычно называют «истинными» и «ложными» ценностями.
"My string" == true
> true
100 == true
> true
0 == true
> false
Логические операторы
Используйте логические операторы И ( && ), ИЛИ ( || ) и НЕ ( ! ) для управления потоком сценария на основе оценки двух или более условных операторов:
2 === 3 || 5 === 5;
> true
2 === 2 && 2 === "2"
> false
2 === 2 && !"My string."
> false
Логическое выражение NOT ( ! ) отменяет истинное или ложное значение операнда, оценивая его как true , если операнд оценивается как false , и false , если операнд оценивается как true :
true
> true
!true
> false
!false
> true
Использование логического оператора NOT ( ! ) перед другим типом данных, например числом или строкой, приводит это значение к логическому значению и меняет истинное или ложное значение результата.
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
Обычной практикой является использование двух операторов NOT для быстрого приведения данных к соответствующему логическому значению:
!!"string"
> true
!!0
> false
Логические операторы AND и OR сами по себе не выполняют никакого приведения. Они возвращают значение одного из двух оцениваемых операндов, причем выбранный операнд определяется этой оценкой.
Логическое И ( && ) возвращает первый из двух своих операндов, только если этот операнд имеет значение false , а второй операнд — в противном случае. В сравнениях, которые оцениваются как логические значения, он возвращает true только если операнды с обеих сторон логического И оцениваются как true . Если какая-либо из сторон оценивает значение false , она возвращает false .
true && false
> false
false && true
> false
false && false
> false
true && true
> true
Когда && используется с двумя нелогическими операндами, первый операнд возвращается без изменений, если его можно привести к значению false . Если первый операнд можно привести к значению true , второй операнд возвращается без изменений:
false && "My string"
> false
null && "My string"
> null
"My string" && false
> false
"My string" && "My second string"
> "My second string"
2 === 2 && "My string"
> "My string"
Логическое ИЛИ ( || ) возвращает первый из двух своих операндов, только если этот операнд имеет значение true , а второй операнд — в противном случае. В сравнениях, которые оцениваются как логические значения, это означает, что оно возвращает true , если любой операнд оценивается как true , а если ни одна из сторон не оценивается как true , возвращается false :
true || false
> true
false || true
> true
true || true
> true
false || false
> false
При использовании || с двумя нелогическими операндами он возвращает первый операнд без изменений, если его можно привести к значению true . Если первый операнд можно привести к значению false , второй операнд возвращается без изменений:
false || "My string"
> "My string"
null || "My string"
> "My string"
"My string" || false
> "My string"
"My string" || "My second string"
> "My string"
2 === 2 || "My string"
> true
Нулевой оператор объединения
Представленный в ES2020 «нулевой оператор объединения» ( ?? ) возвращает первый операнд только в том случае, если этот операнд имеет какое-либо значение, кроме null или undefined . В противном случае он возвращает второй операнд.
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
?? аналогично логическому ИЛИ, но более строго в том, как оценивается первый операнд. || возвращает второй операнд для любого выражения, которое можно привести к значению false , включая undefined и null . ?? возвращает второй операнд только в том случае, если первый операнд строго равен null или undefined , даже если его можно привести к false :
0 ?? "My string";
> 0
false ?? "My string";
> false
undefined ?? "My string";
> "My string"
Логические операторы присваивания
Используйте операторы присваивания, чтобы присвоить значение второго оператора первому оператору. Наиболее распространенным примером этого является одиночный знак равенства ( = ), используемый для присвоения значения объявленной переменной .
Используйте логические операторы присваивания, чтобы условно присвоить значение переменной на основе истинного или ложного значения этой переменной.
Логический оператор присваивания И ( &&= ) оценивает второй операнд и присваивает первому операнду if, только если первый операнд будет иметь значение true — фактически, «если первый операнд истинен, вместо этого присвойте ему значение второго операнда :"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
Истинное или ложное значение первого операнда определяет, будет ли выполнено присваивание. Однако попытка оценить первый операнд с помощью оператора сравнения приводит к получению логического значения true или false , которому невозможно присвоить значение:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
Логический оператор присваивания ИЛИ ( ||= ) оценивает второй операнд и присваивает его первому операнду, если первый операнд оценивается как false - фактически, «если первый операнд является ложным, вместо этого присвойте ему значение второго операнда:»
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
Проверьте свое понимание
Какой оператор указывает «строго равно»?
======!=