и как часто сравнения NaN, undefined и null мешают жизни?
Мне лично мешает то что из-за отсутствия нормальной типизации невозможно по куску кода определить какие методы есть у объекта, какие куда передаются аргументы и т.д. Приходится очень долго ползать по коду и смотреть, ну и отсюда ошибки обращения к несуществующим полям. А вместо переиспользования существующего кода каждый новый разработчик норовит написать своих велосипедов и в итоге получается тормозное говно.