У оператора === есть некоторые нюансы, и многие разработчики JS забывают о них на свою беду. Оператор === сознательно проектировался так, чтобы возвращал ложную информацию для двух специальных значений: NaN и -0.
Пример:
NaN === NaN; // false
0 === -0; // true