Strict answer: Because the JS spec says so:
- If Type(x) is Number, then
- If x is NaN, return false.
- If y is NaN, return false.
Useful answer: The IEEE 754 spec for floating-point numbers (which is used by all languages for floating-point) says that NaNs are never equal.