Голова кипит от непонимания, в разных типах данных используются разные значения, помогите структурировать информацию, пока только как-то понял что null используется у объектов.
Все просто.
undefined и null это 2 специальных типа данных. они равны только друг другу при == (не строгом сравнении) и не равны ничему более.
NaN - то есть not a number(не число).(Я думаю все и так ясно). Появляется при ошибки в вычислениях.
let num = "Hi" * 12;
console.log(num) // NaN
Можешь почитать: https://learn.javascript.ru/types https://learn.javascript.ru/type-conversions