Операторы сравнения сравнивают значения двух операндов и оценивают, является ли утверждение, которое они формируют, 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
Проверьте свое понимание
Какой оператор указывает «строго равно»?
!=
===
=
==