Перейти к содержимому
Теория · Переменные и типы · урок 3 из 9

Примитивные типы

В коробках из прошлого урока лежат разные вещи, и обращаются с ними по-разному. Книгу читают, а яблоко едят. Со значениями в программе так же: два числа можно сложить, а два слова — приставить друг к другу, как «пар» и «ус» дают «парус».

Один и тот же знак + работает по-разному — смотря что стоит по его сторонам:

JavaScript
console.log(2 + 2);  // 4
console.log("2" + "2");  // 22

Давайте разберём обе строки:

  • 2 + 2 — два числа, и + складывает их: получается 4;
  • "2" + "2" — две строки, и + склеивает их в одну: получается 22.

Значения 2 и "2" выглядят похоже, но относятся к разным видам, и от вида зависит, что с ними делает +.

Семь примитивных типов

Вид значения называется типом. В JavaScript семь примитивных типов — так называют типы простых значений, которые не состоят из других значений.

  • number — числа, целые и дробные: 42, -7, 3.14.
  • string — строки, текст в кавычках: "Hi", "2".
  • boolean — логические значения, их всего два: true и false.
  • undefined и null — два значения со смыслом «значения нет».
  • bigint и symbol — очень большие целые числа и особые уникальные значения; в начале работы они почти не встречаются.

Строку можно записать и в одинарных кавычках, '2', но в этом курсе строки пишут в двойных.

Тип есть у значения

Тип принадлежит значению, а не переменной. Переменная, объявленная через let, может хранить сначала число, а после присваивания — строку.

Вернёмся к кладовке. Коробка let не сделана под одну вещь: сегодня в ней число, завтра строка. Тип узнают по тому, что лежит внутри, а не по самой коробке.

Оператор typeof

Знак или слово, которое вычисляет новое значение из стоящих рядом значений, называют оператором. И +, и typeof — операторы. Оператор typeof возвращает имя типа значения, записанное строкой.

console.log принимает несколько значений через запятую и печатает их рядом, через пробел:

JavaScript
const name = "Ann";
console.log(typeof 42, typeof name);  // number string
console.log(typeof true, typeof undefined);  // boolean undefined
console.log(typeof 3.14, typeof NaN);  // number number

Разберём вывод по строкам:

  1. typeof 42 даёт number. Для typeof name JavaScript смотрит на значение в переменной, "Ann", и даёт string.
  2. true — это boolean, а у undefined тип называется так же, как само значение.
  3. И 3.14, и NaN дают number.

Последняя строка показывает две особенности:

  • у дробных чисел нет своего типа: 3.14 — тоже number;
  • NaN (not a number) — особое значение типа number со смыслом «не число».

Странность typeof null

Оператор typeof для null даёт неожиданный ответ:

JavaScript
console.log(typeof null);  // object

Это старая ошибка языка: null — примитивное значение, но typeof называет его "object". Так называется тип составных значений, а null к ним не относится. Исправить ошибку нельзя, не сломав уже написанные программы, поэтому ответ "object" для null нужно запомнить.

На собеседовании часто спрашивают, что вернёт typeof null. Правильный ответ — "object", и стоит добавить, что это давняя ошибка языка, а не настоящий тип null.

Частая ошибка

Строку написали без кавычек:

JavaScript
const greeting = hello;  // ✗
console.log(greeting);
TEXT
ReferenceError: hello is not defined

Без кавычек hello — это имя переменной. JavaScript ищет переменную с таким именем, не находит её и останавливает программу на этой строке. Значением типа string текст становится только в кавычках: const greeting = "hello";.

Главное

  • Тип — вид значения; от типа зависит, что со значением делает оператор, например +.
  • Примитивных типов семь: number, string, boolean, undefined, null, bigint и symbol.
  • Тип принадлежит значению, а не переменной: в let можно положить сначала число, потом строку.
  • typeof возвращает имя типа строкой: typeof NaN — это "number", а typeof null — "object".

Подпишись, чтобы пройти курс

Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.

Войти другим способом