Страницы

Поиск по вопросам

понедельник, 25 ноября 2019 г.

В чем разница между == и ===?


Мне кажется, что операторы == и === работают одинаково. Например:

1 == 1   // true
1 === 1  // true
1 == 2   // false
1 === 2  // false


Оператор == короче и часто встречается в других языках программирования. Так зачем === вообще?
    


Ответы

Ответ 1



Операторы === и !== являются операторами строгого сравнения. Значит, если операнды имеют разные типы, то не являются равными. Например: 1 === "1" // возвращает false 1 !== "1" // возвращает true null === undefined // возвращает false Операторы == и != являются операторами, скажем, грубого сравнения. То есть, есл операнды имеют разные типы, JavaScript пытается как-то преобразовать их, чтобы стали сравнимыми. Например: 1 == "1" // возвращает true 1 != "1" // возвращает false null == undefined // возвращает true Интересно заметить, что в отличие от ===, оператор == не является транзитивным: "0" == 0 // true 0 == "" // true "0" == ""// false Не очень легко помнить правила этого грубого сравнения, и иногда бывает, что он работает неожиданным образом. Поэтому, я рекомендую использовать === вместо ==. Даже я не помню мелкие детали оператора ==, так что посмотрим в спецификации, пункт 11.9.3: Алгоритм сравнения абстрактного равенства Сравнение x == y, где x и y являются значениями, возвращает true или false. Это сравнение производится следующим образом: Если Type(x) такой же, что и Type(y), то Если Type(x) – Undefined, вернуть true. Если Type(x) – Null, вернуть true. Если Type(x) – Number, то Если x – NaN, вернуть false. Если y – NaN, вернуть false. Если x имеет такое же числовое значение, что и y, вернуть true. Если x равно +0 и y равно −0, вернуть true. Если x равно −0 и y равно +0, вернуть true. Вернуть false. Если Type(x) – String, то вернуть true, если x и y имеют абсолютно одинакову последовательность символов (одинаковой длины и с одинаковыми символами в соответствующих позициях). В противном случае вернуть false. Если Type(x) – Boolean, вернуть true, если x и y оба являются или true, ил false. В противном случае вернуть false. Вернуть true, если x и y относятся к одному и тому же объекту. В противном случае вернуть false. Если x равно null и y – undefined, вернуть true. Если x – undefined и y – null, вернуть true. Если Type(x) – Number и Type(y) – String, вернуть результат сравнения x == ToNumber(y). Если Type(x) – String и Type(y) – Number, вернуть результат сравнения ToNumber(x) == y. Если Type(x) – Boolean, вернуть результат сравнения ToNumber(x) == y. Если Type(y) – Boolean, вернуть результат сравнения x == ToNumber(y). Если Type(x) – либо String, либо Number, и Type(y) – Object, вернуть результат сравнения x == ToPrimitive(y). Если Type(x) – Object и Type(y) –либо String, либо Number, вернуть результат сравнения ToPrimitive(x) == y. Вернуть false.

Комментариев нет:

Отправить комментарий