Мне кажется, что операторы == и === работают одинаково. Например:
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.
Комментариев нет:
Отправить комментарий