Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Почему не рекомендуется использовать конструкторы, такие как new String, в JavaScript?
Использование конструкторов, таких как new String или new Number, не рекомендуется, так как они создают объект вместо примитива. Объекты ведут себя иначе, чем примитивные типы данных, и могут приводить к неожиданным результатам в сравнении и других операциях. Примитивные значения (например, строки или числа) следует использовать напрямую без конструкторов.
Как реализовать глубокое копирование объекта без использования JSON.stringify и StructuredClone? Какие сложности могут возникнуть?
Глубокое копирование можно реализовать с помощью рекурсивной функции, которая вручную создает новый объект или массив и копирует все его свойства. Для каждого свойства, если оно является объектом, функция вызывает сама себя. Основные сложности: обработка циклических ссылок (когда объект ссылается сам на себя), копирование специальных объектов (как Date, Map, Set) и поддержка различных типов данных.
В чем разница между Object.assign и копированием через JSON.stringify / JSON.parse?
Object.assign делает поверхностное копирование объекта.JSON.stringify / JSON.parse выполняет глубокое копирование, но с серьёзными ограничениями.
При использовании JSON теряются функции, undefined, Symbol и специальные типы данных.
Также JSON не умеет работать с циклическими ссылками.
Какие проблемы есть у JSON.stringify при копировании объектов?
JSON.stringify не умеет работать со всеми типами данных JavaScript.
Он удаляет функции, undefined, Symbol и методы объектов.
Также он не поддерживает циклические ссылки и специальные объекты вроде Date или Map.
Из-за этого результат копирования может отличаться от исходного объекта.
Что такое structuredClone и чем он отличается от JSON.stringify?
structuredClone — это встроенный API для глубокого копирования объектов.
Он корректно копирует многие типы данных, которые не поддерживает JSON.stringify.structuredClone умеет работать с циклическими ссылками.
При этом он сохраняет структуру данных без преобразования в строку.
От какого объекта в JavaScript в итоге наследуются все типы?
Откуда у строк появляются методы вроде toString()?
Почему 5.toString() не работает, но 5..toString() работает?
В каком порядке вызываются valueOf и toString?
Рейтинг:
4
Сложность:
6
Практически все объекты в JavaScript в итоге наследуются от Object.prototype. Это “базовый” объект в прототипной цепочке, где находятся общие методы (toString, hasOwnProperty и т.д.). Сам Object.prototype обычно наследуется от null, то есть это конец цепочки. Примитивы напрямую не объекты, но при обращении к методам часто временно “оборачиваются” в объект-обёртку.
Рейтинг:
5
Сложность:
6
Строки — это примитивы, но при обращении к методу JavaScript временно оборачивает строку в объект String. Этот объект содержит методы, определённые в String.prototype. После вызова метода временный объект сразу удаляется. Поэтому методы у строк выглядят как “родные”, хотя сами строки объектами не являются.
Рейтинг:
4
Сложность:
7
5.toString() не работает, потому что JavaScript воспринимает точку как часть числового литерала. В результате парсер “ждёт” дробную часть числа, а не вызов метода. Вариант 5..toString() работает, потому что первая точка завершает число, а вторая используется для доступа к методу. После этого число временно оборачивается в объект Number, и метод успешно вызывается.
Рейтинг:
5
Сложность:
7
При приведении объекта к примитиву JavaScript сначала пытается вызвать valueOf, а если он не возвращает примитив, вызывает toString. Этот порядок применяется по умолчанию для числового контекста. Если результат всё ещё не примитив, выбрасывается ошибка. Поведение строго описано в спецификации.
Рейтинг:
2
Сложность:
7
Рейтинг:
1
Сложность:
9
Рейтинг:
4
Сложность:
5
Рейтинг:
4
Сложность:
6
Рейтинг:
3
Сложность:
7