Является ли JavaScript double equals (==) всегда симметричным?

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

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

Ответ 1

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

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

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

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

Ответ 2

Он должен быть симметричным. Однако в некоторых версиях IE есть асимметричный случай:

window == document; // true
document == window; // false

Ответ 3

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

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

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