typeof

typeof - это оператор JavaScript, который помогает узнать тип значения.

На первых уроках он очень полезен, потому что в JavaScript переменная может хранить разные данные: строку, число, логическое значение, undefined и другие типы. Иногда нужно быстро проверить, что именно лежит внутри переменной.

console.log(typeof 'Привет');
console.log(typeof 25);
console.log(typeof true);

В консоли мы увидим:

string
number
boolean

Что такое typeof

typeof не показывает само значение. Он показывает тип этого значения.

let userName = 'Алексей';

console.log(userName);
console.log(typeof userName);

Первый console.log() выведет значение переменной:

Алексей

Второй console.log() выведет тип:

string

То есть typeof как бы отвечает на вопрос: что это за данные?

Синтаксис

Обычно typeof записывают так:

typeof value;

Где value - это значение или переменная, тип которой нужно узнать.

Например:

typeof 10;
typeof 'JavaScript';
typeof false;

Чаще всего результат сразу выводят в консоль:

console.log(typeof 10);
console.log(typeof 'JavaScript');
console.log(typeof false);

Еще можно встретить запись с круглыми скобками:

console.log(typeof('JavaScript'));

Такой вариант тоже работает, но важно понимать: typeof - это не функция, а оператор. Поэтому в простых примерах удобнее писать без скобок.

Что возвращает typeof

typeof возвращает строку с названием типа данных.

Посмотрим на несколько примеров:

console.log(typeof 'Привет');
console.log(typeof 100);
console.log(typeof true);
console.log(typeof undefined);
console.log(typeof {});
console.log(typeof function () {});

Результат будет таким:

string
number
boolean
undefined
object
function

Основные варианты, которые вы будете часто видеть:

  • string - строка;
  • number - число;
  • boolean - логическое значение true или false;
  • undefined - значение не задано;
  • object - объект;
  • function - функция.

Есть и другие типы, например bigint и symbol, но к ним лучше вернуться позже, когда базовые вещи уже будут понятны.

Проверка переменных

typeof удобно использовать, когда значение находится в переменной.

let age = 18;
let name = 'Ирина';
let isStudent = true;

console.log(typeof age);
console.log(typeof name);
console.log(typeof isStudent);

В консоли будет:

number
string
boolean

Обратите внимание: мы передаем в typeof не текст ‘age’, а саму переменную age. Тогда JavaScript проверит значение, которое в ней хранится.

typeof и prompt()

В прошлом уроке мы разбирали prompt(). У него есть важная особенность: он возвращает строку.

let age = prompt('Сколько вам лет?');

console.log(age);
console.log(typeof age);

Даже если пользователь введет число 25, результатом будет строка:

25
string

На экране это может выглядеть как число, но для JavaScript это строка. Именно поэтому typeof полезен: он помогает увидеть реальный тип значения.

Чтобы превратить такую строку в число, можно использовать Number(). Это мы разберем дальше.

let age = prompt('Сколько вам лет?');
let numberAge = Number(age);

console.log(typeof age);
console.log(typeof numberAge);

В консоли будет:

string
number

Особенность с null

У typeof есть одна известная странность:

console.log(typeof null);

Результат будет:

object

На самом деле null - это отдельное значение, которое обычно означает “ничего” или “пусто”. Но typeof null возвращает object. Это старая особенность JavaScript, которая осталась в языке для совместимости.

На первых уроках достаточно просто запомнить: если видите typeof null, не удивляйтесь результату object.

Частые ошибки

Первая ошибка - думать, что typeof меняет тип данных.

let value = '10';

console.log(typeof value);
console.log(value);

typeof только проверяет тип. Он не превращает строку ‘10’ в число 10.

Вторая ошибка - проверять не переменную, а строку с ее названием.

let age = 18;

console.log(typeof age);
console.log(typeof 'age');

В первом случае JavaScript проверит значение переменной age и вернет number. Во втором случае он проверит обычную строку ‘age’ и вернет string.

Третья ошибка - ждать от typeof подробного ответа. Например, массивы и обычные объекты через typeof выглядят одинаково:

console.log(typeof []);
console.log(typeof {});

В обоих случаях будет:

object
object

Это нормально. Для базовой проверки типа typeof подходит хорошо, а более точные способы мы разберем в следующих разделах.

typeof - простой, но полезный инструмент. Он помогает не гадать, какие данные сейчас находятся в переменной, а сразу увидеть их тип в консоли.