Ответ
Большинство современных браузеров предоставляет ~5 МБ (мегабайт) на один домен (протокол + домен + порт). Это ограничение может незначительно варьироваться (например, до 10 МБ в некоторых браузерах).
Практические аспекты:
- Данные хранятся только в виде строк (
key-value). Для объектов используйтеJSON.stringify()при записи иJSON.parse()при чтении. - Превышение лимита вызывает исключение
QuotaExceededError. - Объем общий для всех ключей в рамках домена.
Пример проверки доступного пространства (осторожно, очистит данные test):
function estimateLocalStorageLimit() {
const testKey = 'test';
let data = '';
// Создаем строку ~1 МБ
const oneMegabyte = 'a'.repeat(1024 * 1024);
try {
// Пытаемся записывать данные, пока не получим ошибку
while (true) {
data += oneMegabyte;
localStorage.setItem(testKey, data);
}
} catch (e) {
// Вычисляем записанный объем в МБ
const used = (data.length / (1024 * 1024)).toFixed(2);
console.log(`Примерный доступный объем: ${used} МБ`);
localStorage.removeItem(testKey); // Очистка
}
}
Важно: Для надежных приложений не стоит полагаться на максимальный лимит, а реализовать обработку ошибок при записи.