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

Операторы сравнения сравнивают значения двух операндов и оценивают, является ли утверждение, которое они формируют, 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

Проверьте свое понимание

Какой оператор указывает «строго равно»?

===
==
=
!=