Оператор typeof a
возвращает строку с типом знаения содержащимся в переменной a на момент вызова
Возможные значения:
'string' - любая строка
'boolean' - true / false
'number' - любое число, включая NaN, Infinity и -Infinity
'object' - любой объект кроме функций (не примитив), а так же значение null, массивы, regexp - так же считаются объектами
'function' - функция (если быть точным - объект который можно вызвать, так как Proxy (es2015) все таки объекты, но вызываемый прокси вернет тип 'function')
'undefined' - единственное значение - undefined (не определено), его имеют переменные и поля объектов по умолчанию (если оно не задано), а так же его возвращает оператор void при любом аргументе
'symbol' - символ (es2015) - уникальный идентификатор возвращаемый функцией Symbol(), может использоваться для ключей объекта
Так же для проверки на число, но исключая значения NaN, Infinity и -Infinity можно использовать такую конструкцию
!isNaN(a) && isFinite(a)
(сработает так же на строки, которые парсятся в числа, но можно проверить еще и тип через typeof)