JS Core

Типы данных

Понять, какие виды значений существуют в JavaScript: примитивы (number, string, boolean, undefined, null) и объекты, и как определить тип с помощью typeof.

Начальный (Beginner)

Кратко

JavaScript различает несколько типов значений: числа, строки, логические значения, undefined и null — это примитивы. Объекты (включая массивы и функции) — отдельная категория. typeof помогает определить тип значения.


Подробно

Типы данных — это категории значений. Каждое значение в JavaScript принадлежит к определённому типу, и это определяет, что с ним можно делать.

Примитивные типы (primitives):

  • number — числа: 42, 3.14, -10, Infinity, NaN
  • string — строки (текст): 'привет', "мир", шаблон
  • boolean — логические: true или false
  • undefined — значение «не задано» (переменная создана, но значение не присвоено)
  • null — значение «пусто» (намеренно)
  • bigint — большие числа: 9007199254740991n
  • symbol — уникальные идентификаторы: Symbol('id')

Объекты (objects):

  • { name: 'Анна', age: 25 } — объект
  • [1, 2, 3] — массив (это объект)
  • function() {} — функция (это объект)

Разница между примитивами и объектами:

  • Примитивы — неизменяемы (immutable). Вы не можете изменить строку 'hello' — только создать новую.
  • Объекты — изменяемы (mutable). Можно менять их свойства.
  • Примитивы сравниваются по значению, объекты — по ссылке.

typeof — оператор для определения типа: typeof 42 → 'number' typeof 'hello' → 'string' typeof true → 'boolean' typeof undefined → 'undefined' typeof null → 'object' (это историческая ошибка в JavaScript) typeof {} → 'object' typeof [] → 'object'


Ментальная модель

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


Примеры

**Самый простой:**

javascript
let age = 25;          // number
let name = 'Анна';     // string
let isStudent = true;  // boolean
let nothing = undefined; // undefined

console.log(typeof age);      // 'number'
console.log(typeof name);     // 'string'
console.log(typeof isStudent); // 'boolean'
console.log(typeof nothing);  // 'undefined'

typeof возвращает строку с именем типа. Это помогает понять, с чем вы работаете.

**Простой:**

javascript
let a = 42;
let b = '42';

console.log(a == b);  // true (приведение типов!)
console.log(a === b); // false (разные типы: number vs string)

// Вот почему === важнее, чем ==

Одинаковые символы, но разные типы. === сравнивает и значение, и тип. == сравнивает только значение, приводя типы.

**Реальный пример:**

javascript
let user = { name: 'Анна', age: 25 };
let numbers = [1, 2, 3];

console.log(typeof user); // 'object'
console.log(typeof numbers); // 'object'
console.log(Array.isArray(numbers)); // true

// typeof не различает объекты и массивы!
// Используйте Array.isArray() для проверки массивов.

typeof показывает 'object' для объектов и массивов. Чтобы отличить массив от объекта, используйте Array.isArray().


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

**Неправильно:** typeof null === 'object'

**Почему:** Это историческая ошибка в JavaScript. typeof null возвращает 'object' с 1995 года. Нельзя исправить, сломает обратную совместимость.

**Правильно:** Запомните: typeof null — это 'object'. Для проверки на null используйте === null.

**Неправильно:** Думать, что string — это примитив, который можно изменить

**Почему:** Строки в JavaScript неизменяемы. Вы не можете изменить отдельный символ строки.

**Правильно:** Строки immutable. Любая операция создаёт новую строку: 'hello'.toUpperCase() → 'HELLO' (оригинал не меняется).

**Неправильно:** Путать undefined и null

**Почему:** undefined — это «значение не задано» (автоматически). null — это «значение пусто» (намеренно).

**Правильно:** undefined = значение не задано. null = значение пусто (намеренно).


Важно запомнить

  • Примитивы: number, string, boolean, undefined, null, bigint, symbol
  • Объекты: {}, [], function — всё, что не примитив
  • typeof помогает определить тип значения
  • typeof null === 'object' — историческая ошибка
  • Примитивы сравниваются по значению, объекты — по ссылке

Связь

Назад: Вы умеете создавать переменные (J2) — теперь вы знаете, какие значения они могут хранить.

Вперёд: Следующий урок (J4) — операторы: как работать со значениями: вычисления, сравнения и логические операции.

Материалы курса JS Core — PROlab Academy.