it’s definitely a ⁜little⁜ funky because it calls ToString on ⁜the resulting primitive⁜ not on the original value so
"that is " + {
toString () { return "false" },
valueOf () { return true },
}
returns "that is true"
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)
compare
({ false: "good", true: "bad" }[{
toString () { return "false" },
valueOf () { return true },
}])