Вопросы на собеседовании фронтенд-разработчика. Общие вопросы по JS

Часто задаваемые базовые вопросы по JavaScript

Сравнение null и undefined

Null и undefined при сравнении нестрогим оператором == равны друг другу, и никаким другим значениям во всем языке.

Из спецификации:

Если x равно null и y – undefined, вернуть true. Если x – undefined и y – null, вернуть true.

function compareNullAndUndefined(value: any): boolean {
  return value === null || value === undefined;
}

Оператор нулевого слияния

Оператор ?? возвращает значение правого операнда, если значение левого операнда содержит null или undefined, иначе вернет значение левого операнда.

Различия === и ==

Оператор == допускает преобразование типов при проверке равенства, а === запрещает преобразование типа.

Типы в JS

В JavaScript есть 8 встроенных типов:

  • null
  • undefined
  • boolean
  • number
  • bigInt
  • string
  • object
  • symbol

Все эти типы, за исключение object называются «примитивами». Для проверки типов используется оператор typeof

typeof undefined === "undefined" // true

НО

typeof null === "object" // true

Проверка на null может выглядеть следующим образом

const some = null;

some === null // true
!some && typeof some === "object" // true

Все примитивные значения всегда передаются копированием значения. Объекты (массивы и все объектные обёртки) и функции при присваивании и передаче всегда создают копию ссылки.

Область видимости

Область видимости (scope) — определенный набор правил для хранения переменных в определенном месте и их нахождение в будущем.

Существует две основные модели работы области видимости: лексическая и динамическая. В JavaScript используется лексическая модель области видимости.

Лексическая область видимости определяется тем, где были размещены переменные и блоки области видимости. Фиксируется во время написания программы.

Поднятие (hoisting)

Во время компиляции происходит связывание объявлений переменных и функций с соответствующими областями видимости и только после этого выполняется любая часть кода.

Поднимаются только объявления, присваивание не поднимаются (включая присваивания функциональных выражений).

Temporal Dead Zone

TDZ — промежуток времени между тем, когда переменная становится доступной в области видимости, и её объявлением.

Если обратиться к переменной, которая находятся в TDZ, то получим исключение ReferenceError.

let vs const vs var

var — имеет функциональную область видимости и поднимаются (hoisted) в начало своей области видимости. Может быть переопределена.

let — имеет блочную область видимости, ограниченную фигурными скобками {} и не поднимаются. Может быть переопределена.

const — имеет блочную область видимости и не может быть переопределена.

Замыкание

Замыкание — способность функции запоминать свою лексическую область видимости и обращаться к ней даже тогда, когда функция выполняется вне своей лексической области видимости.

Место вызова (call-site) и стек вызовов

Место вызова — точка, из которой вызывается функция

Стек вызовов — стек функций, которые были вызваны для того, чтобы выполнение дошло до своего текущего состояния

Различия между for...in и for...of

Оба оператора производят обход объектов. Разница в том, как они это делают.

Для for...in обход перечисляемых свойств объекта осуществляется в произвольном порядке.

Для for...of обход происходит в соответствии с тем, какой порядок определен в итерируемом объекте.

Последние обновления

© 2023 — 2026 nbeam.ru