Кратко
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 — это менеджер, который говорит, к какой категории относится вещь.
Примеры
**Самый простой:**
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 возвращает строку с именем типа. Это помогает понять, с чем вы работаете.
**Простой:**
let a = 42;
let b = '42';
console.log(a == b); // true (приведение типов!)
console.log(a === b); // false (разные типы: number vs string)
// Вот почему === важнее, чем ==Одинаковые символы, но разные типы. === сравнивает и значение, и тип. == сравнивает только значение, приводя типы.
**Реальный пример:**
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) — операторы: как работать со значениями: вычисления, сравнения и логические операции.