==
  1. If Type(x) is the same as Type(y), then
    1. Return the result of performing Strict Equality Comparison x === y
  2. If x is null and y is undefined, then
    1. Return true.
  3. If y is null and x is undefined, then
    1. Return true.
  4. If Type(x) is Number and Type(y) is String, then
    1. Return the result of the comparison x == Number(y).
  5. If Type(x) is String and Type(y) is Number, then
    1. Return the result of the comparison Number(x) == y.
  6. If Type(x) is BigInt and Type(y) is String, then
    1. Let n be BigInt(y).
    2. If n is NaN, then
      1. Return false.
    3. Return the result of the comparison x == n.
  7. If Type(x) is String and Type(y) is BigInt, then
    1. Return the result of the comparison y == x.
  8. If Type(x) is Boolean, then
    1. Return the result of the comparison Number(x) == y.
  9. If Type(y) is Boolean, then
    1. Return the result of the comparison x == Number(y).
  10. If Type(x) is either String, Number, BigInt, or Symbol and Type(y) is Object, then
    1. Return the result of the comparison x == ToPrimitive(y).
  11. If Type(x) is Object and Type(y) is either String, Number, BigInt, or Symbol, then
    1. Return the result of the comparison ToPrimitive(x) == y.
  12. If Type(x) is BigInt and Type(y) is Number, or if Type(x) is Number and Type(y) is BigInt, then
    1. If x or y are any of NaN, +∞, or -∞, then
      1. Return false.
    2. If the mathematical value of x is equal to the mathematical value of y, then
      1. Return true.
    3. Return false.
  13. Return false.