Восемь типов данных

Мы уже встречали разные значения:

values.jsjs
const age = 42;const greeting = 'Привет';

Выглядят они по-разному и ведут себя по-разному: числа можно складывать и умножать, а со строками – работать как с текстом.

Категория, к которой относится значение, называется его типом – тип и определяет, что со значением можно делать. Например, 42 имеет тип число (number), а 'Привет' – тип строка (string).

Ещё один простой тип: boolean

Иногда программе нужен не текст и не число, а ответ на вопрос: да или нет. Для этого существует булев тип (boolean). У него всего два значения – true («да») и false («нет»):

boolean.jsjs
const isOnline = true;const isFinished = false;

Карта типов

Все восемь типов – с примерами значений.

number, string и boolean – лишь часть системы. Всего в JavaScript восемь типов: семь примитивных и один объектный. Примитивы представляют отдельные значения, а объекты объединяют значения в структуры.

Два примитива на карте связаны с отсутствием значения, но означают разное: null ставят намеренно – «здесь пусто», а undefined появляется сам, когда значение ещё не определено:

empty.jsjs
const pet = null;  // «пусто» намеренноlet city;  // undefined – ещё не задано

symbol и bigint в начальном коде встречаются редко: первый создаёт уникальные идентификаторы, второй хранит целые числа любой величины.

Восьмой тип – объектный. Объект объединяет несколько связанных значений в одну структуру; к объектному типу относятся также массивы и функции:

object.jsjs
// объект: связанные значения разных типовconst user = {  name: 'Ира',  age: 25,  isOnline: true,};// массив: список значенийconst scores = [7, 9, 10];// функция: действие, вызываемое по имениfunction greet() {  console.log('Привет!');}
Пока достаточно узнавать их по виду.

Тип принадлежит значению, а не переменной. Одна переменная let из урока «Переменные: let и const» может сначала быть связана с числом, а затем со строкой:

dynamic.jsjs
let value = 42;  // numbervalue = 'сорок два';  // string

Переменная осталась той же, но теперь в ней находится значение другого типа. Это и называют динамической типизацией: язык не закрепляет тип за переменной – тип живёт у значения.

typeof: узнать тип значения

Оператор typeof позволяет быстро определить тип большинства значений. Ответ приходит строкой с названием типа: typeof 42 – это строка 'number'. Оператор незаменим, когда значение пришло откуда-то извне и вы не уверены, что это: число или строка с цифрами внутри – для программы это принципиально разные вещи.

typeof.jsjs
console.log(typeof 42);  // 'number'console.log(typeof '42');  // 'string'console.log(typeof true);  // 'boolean'console.log(typeof 'true');  // 'string'

Для number, string, boolean, undefined, symbol и bigint результат совпадает с именем типа. У null, объектов и функций есть особенности:

typeof-exceptions.jsjs
// 'object' – историческое исключениеconsole.log(typeof null);// 'object' – массив относится к объектному типуconsole.log(typeof [1, 2, 3]);// 'function' – у функций свой ответconsole.log(typeof (() => {}));
null – отдельный тип, но typeof отвечает за него 'object' с самой первой версии языка – исправить уже нельзя из-за старого кода.

Поэтому typeof хорошо подходит для простых значений, но не различает все разновидности объектов.

// теперь вы знаете

  1. В JavaScript восемь типов: семь примитивных и один объектный – object
  2. Примитивы представляют самостоятельные значения, а тип object позволяет объединять связанные данные
  3. typeof возвращает строку с названием типа; у null, объектов и функций – особенности
  4. Кавычки делают строку: typeof '42' – это 'string'
  5. Тип принадлежит значению, а не переменной: та же let-переменная может связаться со значением другого типа

Проверьте себя

Что вернёт typeof 'true'?

Что появится в консоли?

let value = 42;
value = 'сорок два';
console.log(typeof value);
переключают уроки · не работают при фокусе в полях ввода