Раздел: Сайтостроение / JavaScript /

Операторы != и == против операторов !== и ===

Что такое JavaScript Что такое JavaScript

Небольшая книга о JavaScript, которая поможет вам в изучении JavaScript. В книге и рассылке сведения для начинающих: что такое JavaScript, как это работает, письма, которые помогут принять решение, надо ли вам это или нет, а также полезные ссылки на обучающие материалы. Подробнее...

Операторы равенства и неравенства в JavaScript работают также, как и в С++. Также имеются операторы идентичности. Отличия между этими операторами рассматриваются в данной статье.

Как всегда напоминаю, что полный обучающий курс по JavaScript можно найти здесь:

>>> JavaScript, jQuery и Ajax с нуля до гуру >>>

Операторы РАВНО и НЕРАВНО

Операторы равенства и неравенства чаще всего используются с условным оператором. Но не только. Например, результат сравнения можно присвоить логической переменной:

a = (100 == b);

Новички, особенно те, кто начинает изучать JavaScript после Паскаля и других подобных языков, часто при этом совершают ошибки, которые очень трудно потом обнаружить в исходном коде. Подробнее об этом здесь.

Оператор == проверяет две величины на равенство.

Оператор !== проверяет две величины на неравенство.

То есть выражение (100 == 200) вернёт false, а (100 !== 200) вернёт true.

Операторы ИДЕНТИЧНО и НЕ ИДЕНТИЧНО

Оператор == проверяет две величины, допуская при этом преобразования типов.

Оператор ===, известный как оператор идентичности, проверяет два операнда на “идентичность”, руководствуясь строгим определением совпадения.

Таким образом, оператор === проверяет две величины на идентичность.

Оператор !=== проверяет две величины на неидентичность.

В JavaScript числовые, строковые и логические значения сравниваются по значению. В этом случае рассматриваются две различные величины, а операторы == и === проверяют, идентичны ли эти два значения. Это значит, что две переменные равны или идентичны, только если они содержат одинаковое значение. Например, две строки равны, только если обе содержат в точности одинаковые символы.

В то же время объекты, массивы и функции сравниваются по ссылке. Это значит, что две переменные равны, только если они ссылаются на один и тот же объект. Два различных массива никогда не могут быть равными или идентичными, даже если они содержат равные или идентичные элементы.

Две переменные, содержащие ссылки на объекты, массивы или функции, равны, только если ссылаются на один и тот же объект, массив или функцию.

Для того чтобы проверить, содержат ли два различных объекта одинаковые свойства или содержат ли два различных массива одинаковые элементы, надо их проверить на равенство или идентичность каждого свойства или элемента. И если какое-либо свойство или элемент само является объектом или массивом, решить, на какую глубину вложенности вы хотите выполнять сравнение.

При определении идентичности двух значений оператор === руководствуется следующими правилами:

  • Если два значения имеют различные типы, они не идентичны.
  • Два значения идентичны, только если оба они представляют собой числа, имеют одинаковые значения и не являются значением NaN (в этом, последнем случае они не идентичны). Значение NaN никогда не бывает идентичным никакому значению, даже самому себе! Чтобы проверить, является ли значение значением NaN, следует использовать глобальную функцию isNaN(). Подробнее см. здесь.
  • Если оба значения представляют собой строки и содержат одни и те же символы в тех же позициях, они идентичны. Если строки отличаются по длине или содержимому, они не идентичны. Обратите внимание, что в некоторых случаях стандарт Unicode допускает несколько способов кодирования одной и той же строки. Однако для повышения эффективности сравнение строк в JavaScript выполняется строго посимвольно, при этом предполагается, что все строки перед сравнением преобразованы в «нормализованную форму».
  • Если оба значения представляют собой логические значения true или false, то они идентичны.
  • Если оба значения ссылаются на один и тот же объект, массив или функцию, то они идентичны. Если они ссылаются на различные объекты (массивы или функции), они не идентичны, даже если оба имеют идентичные свойства или идентичные элементы.
  • Если оба значения равны null или undefined, то они идентичны.

Следующие правила применяются для определения равенства при помощи оператора == :

  • Если два значения имеют одинаковый тип, они проверяются на идентичность. Если значения идентичны, они равны; если они не идентичны, они неравны.
  • Если два значения не относятся к одному и тому же типу, они все же могут быть равными. Правила и преобразования типов при этом такие:
    • Если одно значение равно null, а другое – undefined, то они равны.
    • Если одно значение представляет собой число, а другое – строку, то строка преобразуется в число и выполняется сравнение с преобразованным значением.
    • Если какое-либо значение равно true, оно преобразуется в 1 и сравнение выполняется снова. Если какое-либо значение равно false, оно преобразуется в 0 и сравнение выполняется снова.
    • Если одно из значений представляет собой объект, а другое – число или строку, объект преобразуется в элементарный тип и сравнение выполняется снова. Объект преобразуется в значение элементарного типа либо с помощью своего метода toString(), либо с помощью своего метода valueOf().
    • Встроенные классы базового языка JavaScript сначала пытаются выполнить преобразование valueOf(), а затем toString(), кроме класса Date, который всегда выполняет преобразование toString(). Объекты, не являющиеся частью базового JavaScript, могут преобразовывать себя в значения элементарных типов способом, определенным в их реализации.
    • Любые другие комбинации значений не являются равными.

Например, выражение (1 === '1') вернёт false (потому что здесь сравниваются разные типы), а (1 == '1') вернёт true (потому что строка будет преобразована в число).

Эта статья - лишь капля в море знаний о JavaScript. Если хотите испить эту чашу до дна, то изучить этот язык, а также jQuery и Ajax можно здесь:

>>> JavaScript, jQuery и Ajax с нуля до гуру >>>


Программирование на JavaScript с Нуля до Гуру 2.0 Программирование на JavaScript

Видеокурс о программировании на JavaScript. Содержит 8 больших разделов от основ до работы с сетевыми запросами. В комплекте 5 подарков - мини-курсов по темам, связанным с сайтостроением. 72 урока продолжительностью более 13 часов. Упражнения и примеры исходных кодов. Поддержка от автора. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика