JavaScript. Подробное руководство, 6-е издание, стр. 38

Оператор

<b>&gt;&gt;&gt;</b>
аналогичен оператору », за исключением того, что при сдвиге старшие разряды заполняются нулями, независимо от знака первого операнда. Например, выражение
<b>-1 &gt;&gt;&gt; 4</b>
даст в результате -1, а выражение
<b>-1 &gt;&gt;&gt; 4</b>
даст в результате 0x0FFFFFFF.

4.9. Выражения отношений

В этом разделе описаны операторы отношения в языке JavaScript. Это операторы проверяют отношение между двумя значениями (такое как «равно», «меньше» или «является ли свойством») и возвращают true или false в зависимости от того, как соотносятся операнды. Выражения отношений всегда возвращают логические значения, и эти значения чаще всего применяются в инструкциях

<b>if, while</b>
и
<b>for</b>
для управления ходом исполнения программы (глава 5). В следующих подразделах описываются операторы равенства и неравенства, операторы сравнения и два других оператора отношений,
<b>in</b>
и
<b>instanceof</b>
.

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

Операторы

<b>==</b>
и
<b>===</b>
проверяют два значения на совпадение, используя два разных определения совпадения. Оба оператора принимают операнды любого типа и возвращают
<b>true</b>
, если их операнды совпадают, и
<b>false</b>
, если они различны. Оператор
<b>===</b>
, известный как оператор идентичности, проверяет два операнда на «идентичность», руководствуясь строгим определением совпадения. Оператор
<b>==</b>
, оператор равенства, проверяет, равны ли два его операнда в соответствии с менее строгим определением совпадения, допускающим преобразования типов.

В языке JavaScript поддерживаются операторы

<b>=</b>
,
<b>==</b>
и
<b>===</b>
. Убедитесь, что вы понимаете разницу между операторами присваивания, равенства и идентичности. Будьте внимательны и применяйте правильные операторы при разработке своих программ! Очень заманчиво назвать все три оператора «равно», но во избежание путаницы лучше читать оператор
<b>=</b>
как «получается», или «присваивается», оператор
<b>==</b>
читать как «равно», а словом «идентично» обозначать оператор
<b>===</b>
.

Операторы

<b>!=</b>
и
<b>!==</b>
выполняют проверки в точности противоположные операторам
<b>==</b>
и
<b>===</b>
. Оператор неравнства 
<b>!=</b>
возвращает значение
<b>false</b>
если два значения равны друг другу в том смысле, в каком они считаются равными оператором
<b>==</b>
, и true в противном случае. Как будет рассказываться в разделе 4.10, оператор
<b>!</b>
выполняет логическую операцию НЕ. Отсюда легко будет запомнить, что операторы
<b>!=</b>
и
<b>! ==</b>
означают «не равно» и «не идентично».

Как отмечалось в разделе 3.7, объекты в языке JavaScript сравниваются по ссылке, а не по значению. Это значит, что объект равен только сам себе и не равен никакому другому объекту. Даже если два различных объекта обладают одним и тем же набором свойств, с теми же именами и значениями, они все равно будут считаться неравными. Два массива никогда не могут быть равными, даже если они содержат одинаковые элементы, следующие в одном порядке.

Оператор идентичности

<b>===</b>
вычисляет значения своих операндов, а затем сравнивает два значения, без преобразования типов, руководствуется следующими правилами:

• Если два значения имеют различные типы, они не идентичны.

• Если оба операнда являются значением

<b>null</b>
или
<b>undefined</b>
, они идентичны.

• Если оба операнда являются логическим значением

<b>true</b>
или оба являются логическим значением
<b>false</b>
, они идентичны.

• Если одно или оба значения являются значением

<b>NaN</b>
, они не идентичны. Значение
<b>NaN</b>
никогда не бывает идентичным никакому значению, даже самому себе! Чтобы проверить, является ли значение х значением
<b>NaN</b>
, следует использовать выражение
<b>х !== х</b>
. Значение
<b>NaN</b>
- единственное, для которого такая проверка вернет
<b>true</b>
.

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

• Если оба значения являются строками и содержат одни и те же 16-битные значения (подробности во врезке в разделе 3.2) в одинаковых позициях, они идентичны. Если строки отличаются длиной или содержимым, они не идентичны. Две строки могут иметь один и тот же смысл и одинаково выглядеть на экране, но содержать отличающиеся последовательности 16-битных значений. Интерпретатор JavaScript не выполняет нормализацию символов Юникода, поэтому подобные пары строк не считаются операторами

<b>===</b>
и
<b>==</b>
ни равными, ни идентичными. Другой способ сравнения строк обсуждается в части III книги, в описании метода
<b>String.localeCompare().</b>

• Если оба значения ссылаются на один и тот же объект, массив или функцию, то они идентичны. Если они ссылаются на различные объекты (массивы или функции), они не идентичны, даже если оба объекта имеют идентичные свойства.

Оператор равенства

<b>==</b>
похож на оператор идентичности, но он использует менее строгие правила. Если значения операндов имеют разные типы, он выполняет преобразование типов и пытается выполнить сравнение:

• Если два значения имеют одинаковый тип, они проверяются на идентичность, как было описано выше. Если значения идентичны, они равны; если они не идентичны, они не равны.

• Если два значения не относятся к одному и тому же типу, оператор

<b>==</b>
все же может счесть их равными. При этом используются следующие правила и преобразования типов:

• Если одно значение

<b>null</b>
, а другое -
<b>undefined</b>
, то они равны.