Ответ 1
Текст, читаемый человеком, об их различиях
Использование !==
и ===
будет выполнять более строгую проверку, чем ==
/!=
. Первый будет проверять, являются ли сравниваемые объекты одного и того же типа, а также если значения совпадают.
Использование ==
позволит сделать неявный приведение, см. приведенные ниже примеры.
(0 == '0') // true
(0 === '0') // false
('' == 0 ) // true, the string will implicitly be converted to an integer
('' === 0 ) // false, no implicit cast is being made
Что говорит стандарт?
11.9.6 Сравнение строгого равенства
Алгоритм Сравнение x === y, где x и y - значения, выражает true или false. Такое сравнение выполняется следующим образом:
- Если Type (x) отличается от Type (y), верните false.
- Если тип (x) равен Undefined, верните true.
- Если Type (x) - Null, верните true.
Если Type (x) - Number, то
а. Если x является NaN, верните false.
b.Если 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) является логическим, верните true, если x и y оба true или оба false; в противном случае верните false.
- Возвращает true, если x и y относятся к одному и тому же объекту. В противном случае верните false. ПРИМЕЧАНИЕ. Этот алгоритм отличается от алгоритма SameValue (9.12) при обработке подписанных нулей и NaNs.
11.9.3 Алгоритм сравнения абстрактного равенства
Сравнение x == y, где x и y - значения, выдает true или ложный. Такое сравнение выполняется следующим образом:
Если тип (x) совпадает с типом (y), то
а. Если тип (x) равен Undefined, верните t rue.
б. Если Type (x) - Null, верните true.
с. Если Type (x) - Number, то
1. If x is NaN, return false. 2. If y is NaN, return false. 3. If x is the same Number value as y, return true. 4. If x is +0 and y is 0, return true. 5. If x is 0 and y is +0, return true. 6. Return false.
д. Если Type (x) - String, тогда верните true, если x и y точно одна и та же последовательность символов (одинаковая длина и одинаковые символы в соответствующие позиции). В противном случае верните false.
е. Если Type (x) является логическим, верните true, если x и y являются истинными или оба ложные. В противном случае верните 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) является логическим, верните результат сравнения ToNumber (x) == y.
- Если тип (y) является логическим, верните результат сравнения x == ToNumber (y).
- Если Type (x) является либо String, либо Number и Type (y) - Object, верните результат сравнения x == ToPrimitive (y).
- Если Type (x) является Object и Type (y) является либо строкой, либо номером, верните результат сравнения ToPrimitive (x) == y.
- Возвращает false