Из вышеперечисленных настоящий примитив только null. NaN это число :) Про undefined я комментом выше ответил.
undefined — это глобальная переменная, ей даже можо безнаказанно попытаться присвоить другое значение. Значение скорее всего не присвоится (ибо она non-writable), но и эксепшен (как например с null) не выпадет.
На любой примитив найдётся соответствующий объект (кроме null)
Забыл самое главное: если в JS поделить на ноль, то ответом будет Infinity! Кто ещё так умеет?
ECMA Script вообще и JavaScript в частности. Потому, что есть и на фронте и на бэке. Потому, что быстрее уже только компилируемые языки. Потому, что есть сообщество. Потому, что низкий порог вхождения. Потому, что стандиартизируется консорциумом а не закрытой группой. Потому, что мультипарадигменный. Потому, что всё — объект (и даже небо, и даже аллах).
А как Вы бы распределили популярные сегодня языки по уровню порога вхождения?