Этап 5 из 19 · ≈ 8 ч

Типы, сравнение и копирование

Основа с Junior

Примитивы и объекты, приведение типов, == против ===, ссылки и копирование.

В JavaScript 7 примитивов — string, number, bigint, boolean, undefined, null, symbol — и объекты (включая массивы и функции). Примитивы копируются по значению, объекты — по ссылке.

typeof null            // "object" — историческая ошибка
0.1 + 0.2 === 0.3      // false — плавающая точка
[] == false            // true — приведение типов
const a = { n: 1 }; const b = a; b.n = 2; a.n  // 2 — одна ссылка

Что важно знать

  • === сравнивает без приведения типов — использовать всегда; == — только осознанно (x == null ловит и null, и undefined).
  • Ложные значения: false, 0, -0, 0n, "", null, undefined, NaN. NaN !== NaN, проверка — Number.isNaN.
  • ?? срабатывает только на null/undefined, || — на любое ложное.
  • Копирование: {...obj} и [...arr] — поверхностные, structuredClone(obj) — глубокое.
  • Методы массивов: map, filter, reduce возвращают новый массив, sort, reverse, splice меняют исходный (есть неизменяющие toSorted, toReversed, toSpliced).

Критерии освоения

Junior ≈ 8 ч

  • Называет типы JavaScript и объясняет разницу примитивов и объектов
  • Предсказывает результат сравнений и приведений типов и всегда использует ===
  • Копирует объекты поверхностно и глубоко и знает, какие методы массивов меняют исходный массив

Практика. Решить 20 задач «что выведет код» на типы и приведения и реализовать глубокое копирование вручную.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Какие типы данных есть в JavaScript?Junior

Семь примитивов: string, number, bigint, boolean, undefined, null, symbol — и object (включая массивы, функции, даты). Примитивы неизменяемы и копируются по значению, объекты — передаются по ссылке. typeof null === "object" — историческая ошибка первой…

Полный разбор
Чем == отличается от === в JavaScript?Junior

=== — строгое сравнение: типы должны совпадать, без преобразований. == — нестрогое: перед сравнением приводит типы по запутанным правилам ("1" == 1, 0 == "", null == undefined — всё true). Используют ===; единственная распространённая идиома с == — x == null…

Полный разбор
Как скопировать объект в JavaScript и чем поверхностная копия отличается от глубокой?Junior

Поверхностная копия ({...obj}, Object.assign, [...arr], slice) копирует только верхний уровень — вложенные объекты общие. Глубокая — structuredClone(obj) (встроенная, сохраняет Date, Map, Set, циклические ссылки). JSON-трюк теряет функции, undefined, Date и…

Полный разбор
Какие методы массивов меняют исходный массив, а какие возвращают новый?Junior

Мутируют: push, pop, shift, unshift, splice, sort, reverse, fill. Возвращают новый: map, filter, slice, concat, flat, а с ES2023 — toSorted, toReversed, toSpliced, with. forEach ничего не возвращает — для побочных эффектов; map — для преобразования в новый…

Полный разбор

Документация

← Вся карта «Frontend-разработчик»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования