JavaScript. Подробное руководство, 6-е издание
Оператор
аналогичен оператору », за исключением того, что при сдвиге старшие разряды заполняются нулями, независимо от знака первого операнда. Например, выражение<b>>>></b>даст в результате -1, а выражение<b>-1 >>> 4</b>даст в результате 0x0FFFFFFF.<b>-1 >>> 4</b>4.9. Выражения отношений
В этом разделе описаны операторы отношения в языке JavaScript. Это операторы проверяют отношение между двумя значениями (такое как «равно», «меньше» или «является ли свойством») и возвращают true или false в зависимости от того, как соотносятся операнды. Выражения отношений всегда возвращают логические значения, и эти значения чаще всего применяются в инструкциях
и<b>if, while</b>для управления ходом исполнения программы (глава 5). В следующих подразделах описываются операторы равенства и неравенства, операторы сравнения и два других оператора отношений,<b>for</b>и<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>, и true в противном случае. Как будет рассказываться в разделе 4.10, оператор<b>==</b>выполняет логическую операцию НЕ. Отсюда легко будет запомнить, что операторы<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>ни равными, ни идентичными. Другой способ сравнения строк обсуждается в части III книги, в описании метода<b>==</b><b>String.localeCompare().</b>• Если оба значения ссылаются на один и тот же объект, массив или функцию, то они идентичны. Если они ссылаются на различные объекты (массивы или функции), они не идентичны, даже если оба объекта имеют идентичные свойства.
Оператор равенства
похож на оператор идентичности, но он использует менее строгие правила. Если значения операндов имеют разные типы, он выполняет преобразование типов и пытается выполнить сравнение:<b>==</b>• Если два значения имеют одинаковый тип, они проверяются на идентичность, как было описано выше. Если значения идентичны, они равны; если они не идентичны, они не равны.
• Если два значения не относятся к одному и тому же типу, оператор
все же может счесть их равными. При этом используются следующие правила и преобразования типов:<b>==</b>• Если одно значение
, а другое -<b>null</b>, то они равны.<b>undefined</b>