> Какие данные (примитивы или объекты) можно хранить в localStorage (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: IT-One
Стек: JavaScript
> Пример ответа
Короткий ответ
В localStorage можно хранить только строки. Любые данные (числа, объекты, массивы, булевы значения) автоматически преобразуются в строку через toString(). Для хранения сложных структур необходимо использовать JSON.stringify() при записи и JSON.parse() при чтении. Размер хранилища ограничен 5-10 МБ в зависимости от браузера.
Подробное объяснение
localStorage - это часть Web Storage API, которая предоставляет ключ-значение хранилище в браузере. Значением может быть только строка. При попытке сохранить примитив (число, null, undefined, boolean) он неявно приводится к строке. Например, localStorage.setItem('num', 123) сохранит строку "123". Объекты и массивы преобразуются в "[object Object]" или "null" для null, что делает данные бесполезными без сериализации.
Исключение: Symbol и BigInt - они не поддерживаются и вызовут ошибку или неявное приведение. undefined превращается в строку "undefined".
На практике
- Всегда используйте
JSON.stringify()для объектов и массивов, иJSON.parse()для восстановления. - Проверяйте наличие ключа перед чтением, чтобы избежать
null(если ключа нет, возвращаетсяnull). - Учитывайте лимит в 5-10 МБ - для больших данных используйте IndexedDB.
- Не храните чувствительные данные (пароли, токены) - localStorage доступен через JavaScript и не защищён от XSS.
- Для синхронизации между вкладками используйте событие
storage.
Пример кода
JAVASCRIPT// Сохранение объектаconst user = { name: 'Alice', age: 30 };localStorage.setItem('user', JSON.stringify(user));// Чтение объектаconst storedUser = JSON.parse(localStorage.getItem('user'));console.log(storedUser.name); // 'Alice'// Сохранение числа (автоматически станет строкой)localStorage.setItem('count', 42);console.log(typeof localStorage.getItem('count')); // 'string'// Ошибка при прямом сохранении объектаlocalStorage.setItem('bad', { a: 1 });console.log(localStorage.getItem('bad')); // '[object Object]'
Как отвечать на собеседовании
Начните с ключевого факта: только строки. Затем объясните механизм приведения типов и необходимость JSON-сериализации для сложных данных. Упомяните ограничения по размеру и безопасности. Если спросят про альтернативы, скажите про sessionStorage (аналогично, но очищается при закрытии вкладки) и IndexedDB (для больших объёмов). Избегайте излишних деталей про внутреннюю реализацию браузеров.
Что проверяет интервьюер
- Понимание типов данных в JavaScript и неявного приведения.
- Знание API localStorage и его ограничений.
- Умение работать с JSON-сериализацией.
- Осведомлённость о безопасности (XSS) и альтернативных хранилищах.
Типичные ошибки
- Попытка сохранить объект напрямую без
JSON.stringify()- получается"[object Object]". - Забывают парсить строку обратно в объект при чтении.
- Путают localStorage с sessionStorage или cookies.
- Считают, что localStorage хранит данные в бинарном виде или поддерживает другие типы.
- Не проверяют существование ключа перед парсингом, что вызывает ошибку при
null.
> Похожие задачи по frontend
Куда пойдет выполнение после запуска промиса в JavaScript
Какие коллекции кроме Set существуют в JavaScript
Почему this динамический в JavaScript и когда он определяется
Как отсутствие собственного this у стрелочной функции влияет на вызов методов в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью