You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 6-data-storage/02-localstorage/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,11 @@
2
2
3
3
Объекты веб-хранилища `localStorage` и `sessionStorage` позволяют хранить пары ключ/значение в браузере.
4
4
5
-
Что в них важно - данные, которые в них записаны, сохраняются после обновления страницы (в случае sessionStorage) и даже после перезапуска браузера (при использовании localStorage). Скоро мы это увидим.
5
+
Что в них важно - данные, которые в них записаны, сохраняются после обновления страницы (в случае `sessionStorage`) и даже после перезапуска браузера (при использовании `localStorage`). Скоро мы это увидим.
6
6
7
7
Но ведь у нас уже есть куки. Зачем тогда эти объекты?
8
8
9
-
- В отличие от кук, объекты веб-хранилища не отправляются на сервер при каждом запросе. Поэтому мы можем хранить гораздо больше данных. Большинство браузеров могут сохранить как минимум 2 мегабайта данных (или больше), и этот размер можно поменять в настройках.
9
+
- В отличие от куки, объекты веб-хранилища не отправляются на сервер при каждом запросе. Поэтому мы можем хранить гораздо больше данных. Большинство браузеров могут сохранить как минимум 2 мегабайта данных (или больше), и этот размер можно поменять в настройках.
10
10
- Ещё одно отличие от куки - сервер не может манипулировать объектами хранилища через HTTP-заголовки. Всё делается при помощи JavaScript.
11
11
- Хранилище привязано к источнику (домен/протокол/порт). Это значит, что разные протоколы или поддомены определяют разные объекты хранилища, и они не могут получить доступ к данным друг друга.
12
12
@@ -19,7 +19,7 @@
19
19
-`key(index)` -- получить ключ на заданной позиции.
20
20
-`length` -- количество элементов в хранилище.
21
21
22
-
Как вы видите, интерфейс похож на `Map` (`setItem/getItem/removeItem`), но также запоминается порядок элементов, и можно получить доступ к элементу по индексу -- `key(index)`.
22
+
Как видим, интерфейс похож на `Map` (`setItem/getItem/removeItem`), но также запоминается порядок элементов, и можно получить доступ к элементу по индексу -- `key(index)`.
Это возможно по историческим причинам и, как правило, работает, но обычно не рекомендуется по двум причинам:
65
+
Это возможно по историческим причинам и, как правило, работает, но обычно не рекомендуется, потому что:
66
66
67
-
1. Если ключ генерируется пользователем, то он может быть каким угодно, включая `length` или `toString`, а также другой встроенный метод `localStorage`. В этом случае `getItem/setItem` сработают нормально, а вот чтение/запись как свойства объекта не пройдут:
67
+
1. Если ключ генерируется пользователем, то он может быть каким угодно, включая `length` или `toString` или другой встроенный метод `localStorage`. В этом случае `getItem/setItem` сработают нормально, а вот чтение/запись как свойства объекта не пройдут:
68
68
```js run
69
69
let key ='length';
70
70
localStorage[key] =5; // Ошибка, невозможно установить length
71
71
```
72
72
73
-
2. Когда мы модифицируем данные, то срабатывает событие `storage`. Но это событие не происходит при записи без `setItem`, как свойство обычного объекта. Мы увидим это позже в этой главе.
73
+
2. Когда мы модифицируем данные, то срабатывает событие `storage`. Но это событие не происходит при записи без `setItem`, как свойства объекта. Мы увидим это позже в этой главе.
alert( sessionStorage.getItem('test') ); // после обновления: 1
176
176
```
177
177
178
-
...Но если вы откроете ту же страницу в другой вкладке и повторите получить данные снова, то код выше вернет `null`, что значит "ничего не найдено".
178
+
...Но если вы откроете ту же страницу в другой вкладке и попробуете получить данные снова, то код выше вернет `null`, что значит "ничего не найдено".
179
179
180
180
Так получилось, потому что `sessionStorage` привязан не только к источнику, но и к вкладке браузера. Поэтому `sessionStorage` используется нечасто.
181
181
182
-
## Событие `storage`
182
+
## Событие storage
183
183
184
184
Когда обновляются данные в `localStorage` или `sessionStorage`, генерируется событие [storage](https://www.w3.org/TR/webstorage/#the-storage-event) со следующими свойствами:
Обратите внимание, что событие также содержит:`event.url`- url-адрес документа, в котором данные обновились.
215
215
216
-
Также `event.storageArea` содержит объект хранилища - событие одно и то же для `sessionStorage` и `localStorage`, поэтому `storageArea` ссылается на то хранилище, которое было изменено. Мы можем захотеть что-то записать в ответ на изменения.
216
+
Также `event.storageArea` содержит объект хранилища - событие одно и то же для `sessionStorage` и `localStorage`, поэтому `event.storageArea` ссылается на то хранилище, которое было изменено. Мы можем захотеть что-то записать в ответ на изменения.
217
217
218
218
**Это позволяет разным окнам одного источника обмениваться сообщениями.**
Объекты веб-хранилища `localStorage` и `sessionStorage` позволяют хранить пары ключ/значение в браузере.
225
225
-`key` и `value` должны быть строками.
226
226
- Лимит 2 Мб+, зависит от браузера.
227
-
- Данные могут храниться неограниченное время.
227
+
- Данные не имеют "времени истечения".
228
228
- Данные привязаны к источнику (домен/протокол/порт).
229
229
230
230
|`localStorage`|`sessionStorage`|
@@ -241,10 +241,10 @@ API:
241
241
-`key(index)`-- получить ключ на заданной позиции.
242
242
-`length`-- количество элементов в хранилище.
243
243
- Используйте `Object.keys` для получения всех ключей.
244
-
- Можно использовать ключи в качестве свойств объекта, в этом случае событие`storage` не срабатывает.
244
+
- Можно обращаться к ключам как к обычным свойствам объекта, в этом случае событие`storage` не срабатывает.
245
245
246
246
Событие storage:
247
247
248
248
- Срабатывает при вызове `setItem`, `removeItem`, `clear`.
249
-
- Содержит все данные об операции, `url` документа и объект хранилища.
250
-
- Срабатывает на всех объектах `window`, которые имеют доступ к хранилищу, а также там, где оно было сгенерировано (на вкладке для `sessionStorage`, глобально для `localStorage`).
249
+
- Содержит все данные об произошедшем обновлении (`key/oldValue/newValue`), `url` документа и объект хранилища`storageArea`.
250
+
- Срабатывает на всех объектах `window`, которые имеют доступ к хранилищу, кроме того, где оно было сгенерировано (внутри вкладки для `sessionStorage`, глобально для `localStorage`).
0 commit comments