NaN. Floating point NaN is not equal to any number including itself. NaN == NaN is always false (even if the bits are same). NaN != NaN is always true. Computing on NaN usually gives NaN (it can "contaminate" computation). There are +Inf and -Inf. They are not NaN. There is a negative zero -0.0 which is different to normal zero. The negative zero equals zero when using floating point comparision. Normal zero is treated as "positive zero". JS use floating point for all numbers. The max accurate integer is 2 53 − 1 2^{53}-1 253−1 if not using BigInt . If a JSON contains an integer larger than that, and JS deserializes it using JSON.parse , the number in result will be inaccurate. The workaround is to use other ways of deserializing JSON or use string for large integer. (Putting millisecond timestamp integer in JSON fine, as millisecond timestamp exceeds limit in year 287396. But nanosecond timestamp suffers from that issue.)