В спецификации Javascript приведен алгоритм ==:
- Если SameType(x, y) истинно, то
a. Верните IsStrictlyEqual(x, y). - Если x имеет значение NULL, а y не определено, верните true.
- Если x не определено, а y имеет значение NULL. , верните true.
- ПРИМЕЧАНИЕ. Этот шаг заменен в разделе B.3.6.2.
- Если x — число, а y — строка , возвращаться ! IsLooselyEqual(x, ! ToNumber(y)).
- Если x — строка, а y — число, верните ! IsLooselyEqual(! ToNumber(x), y).
- Если x — это BigInt, а y — строка, то
a. Пусть n равно StringToBigInt(y).
b. Если n не определено, верните false.
c. Возвращаться ! IsLooselyEqual(x, n). - Если x — это строка, а y — BigInt, верните ! IsLooselyEqual(y, x).
- Если x — логическое значение, верните ! IsLooselyEqual(! ToNumber(x), y).
- Если y — логическое значение, верните ! IsLooselyEqual(x, ! ToNumber(y)).
- Если x — это строка, число, BigInt или символ, а y — объект, верните ! IsLooselyEqual(x, ? ToPrimitive(y)).
- Если x — объект, а y — строка, число, BigInt или символ, верните ! IsLooselyEqual(? ToPrimitive(x), y).
- Если x — это BigInt, а y — число, или если x — число, а y — BigInt, то
а. Если x не конечно или y не конечно, верните false.
b. Если ℝ(x) = ℝ(y), вернуть true; в противном случае верните false. - Верните false.
Если первый шаг:
1.if x или y — NaN, верните false.
алгоритм может получить и вернуть этот результат немедленно.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -algorithm