for the people who aren’t up on the ECMAScript standard, ToPrimitive, ToString, and ToNumeric are abstract operations defined in the standard, not functions callable from within Javascript code
1. ToPrimitive throws an error, for example because it does not produce a primitive
2. one of the resulting primitive values is a string, and ToString throws an error, because the primitive value cannot be converted to a string (symbols are the only primitive value which can’t be converted to strings by ToString atm)
3. neither primitive value is a string, and ToNumeric throws an error, for example because it does not produce a numeric value
4. The numeric values produced by calling ToNumeric on both sides are different types (presently the available types are numbers and bigints)
anyway + fails if :—
1. ToPrimitive throws an error, for example because it does not produce a primitive
2. one of the resulting primitive values is a string, and ToString throws an error, because the primitive value cannot be converted to a string (symbols are the only primitive value which can’t be converted to strings by ToString atm)
3. neither primitive value is a string, and ToNumeric throws an error, for example because it does not produce a numeric value
4. The numeric values produced by calling ToNumeric on both sides are different types (presently the available types are numbers and bigints)