<div dir="ltr">> <span style="font-size:12.8px">It's reasonable for non-coercing === to work on different types, but </span><span style="font-size:12.8px">what would a non-coercing + do with different types? It has to throw </span><span style="font-size:12.8px">an error.</span><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Ah, didn’t catch that you were talking about non-relational operators as well. Assuming a strict `+` was still overloaded for string concatenation, yeah, an error makes sense (whereas if numeric only, NaN might also be considered a reasonable answer).</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">For strict `<`, etc, I think it would be unintuitive to get an error or to have arbitrary type order. Rather I’d expect it to be false when the types didn’t match, since, for example, the correct answer to both the questions "is seven greater than an object?" and "is an object greater than 7?" is "no". This would be consistent with the behavior of the existing always-incomparable value, NaN, as well. That said, I think an error would be better than having an arbitrary type order if those were the two choices.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 13, 2017 at 12:56 AM, felix <span dir="ltr"><<a href="mailto:felix8a@gmail.com" target="_blank">felix8a@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Wed, Apr 12, 2017 at 7:23 PM, Darien Valentine <<a href="mailto:valentinium@gmail.com">valentinium@gmail.com</a>> wrote:<br>
>> One common JS problem is NaNs ending up in unexpected places, and it's<br>
>> often difficult to trace back where they came from. Getting a type error<br>
>> instead of a NaN would be nice.<br>
><br>
> I’m not sure this would help with that. NaN may be the product of coercion,<br>
> but NaN itself is a numeric value, and it can be produced without any type<br>
> coercion, e.g. `Infinity/Infinity`, `(-1) ** 0.5`, etc. And the `===`<br>
> operator is a strict, non-coercive comparison, but that doesn’t mean it<br>
> throws type errors.<br>
<br>
</span>Mysterious NaNs in js are usually due to implicit conversion of random<br>
objects to numbers, not normal numeric computation.<br>
<br>
It's reasonable for non-coercing === to work on different types, but<br>
what would a non-coercing + do with different types? It has to throw<br>
an error.<br>
<br>
Non-coercing < might throw an error or use some arbitrary ordering of<br>
types. I don't have strong feelings about that.<br>
</blockquote></div><br></div>