0 === -0 is true because 0 doesn't have sign
NaN === NaN is false because, according to IEEE 754 specifications any operation performed on NaN values should yield a false value or should raise an error.
-0 does in fact have a sign:
Moreover, there are two zero values, called signed zeros: the sign bit specifies whether a zero is +0 (positive zero) or −0 (negative zero).
That same Wikipedia article specifies that 0 and -0 should compare as equal.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.