Подтвердить что ты не робот

Операторы сравнения Javascript!= Vs! ==

Возможный дубликат:
Javascript === vs ==: Имеет ли значение, какой оператор "равный" я использую?
Разница между == и === в JavaScript

У меня есть две переменные для сравнения.

Результат не должен быть равным, в каком условии я должен использовать!= и! ==?

потому что, когда я использую оба оператора, он работает правильно, но мне нужно точно знать, в чем разница.

4b9b3361

Ответ 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

Ответ 2

Разница в том, что предыдущая (!=) Версия будет приводить две переменные к совместимости типов перед сравнением. Следовательно:

"" == 0    -> true
"" === 0   -> false

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

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

См. Https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators для получения дополнительной информации.

Ответ 3

Разница в том, что! == возвращает true, только когда переменные имеют одинаковый тип и не равны.