Является ли двойное равенство JavaScript (==) всегда симметричным? - PullRequest
35 голосов
/ 15 апреля 2011

Есть много случаев, когда оператор равенства типа JavaScript не является транзитивным. Например, см. " Транзитивность равенства JavaScript странная ."

Однако, есть ли случаи, когда == не симметричен ? То есть где a == b равно true и b == a равно false?

Ответы [ 3 ]

35 голосов
/ 15 апреля 2011

Это предполагается симметричным.Однако в некоторых версиях IE существует асимметричный случай:

window == document; // true
document == window; // false
30 голосов
/ 15 апреля 2011

В Javascript == всегда симметричный .

В спецификации указано :

ПРИМЕЧАНИЕ 2 Операторы равенстваследующие инварианты:

  • A != B эквивалентно !(A == B).
  • A == B эквивалентно B == A, за исключением порядка вычисления A and B.
10 голосов
/ 15 апреля 2011

Ответ на ваш фактический вопрос (является симметричным оператором) - да.В спецификации ECMA-262 прямо указано:

ПРИМЕЧАНИЕ 2 Операторы равенства поддерживают следующие инварианты:

  • A != B эквивалентно !(A == B).
  • A == B эквивалентно B == A, за исключением порядка вычисления A и B.
...