Skip to content

Commit 826bbe2

Browse files
committed
Правки5
1 parent 6e20af3 commit 826bbe2

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

6-data-storage/02-localstorage/1-form-autosave/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55

66
Когда пользователь закроет страницу и потом откроет ее заново он должен увидеть последнее введенное значение.
77

8-
Например:
8+
Вот пример:
99

1010
[iframe src="solution" height=120]

6-data-storage/02-localstorage/article.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
Объекты веб-хранилища `localStorage` и `sessionStorage` позволяют хранить пары ключ/значение в браузере.
44

5-
Что в них важно - данные, которые в них записаны, сохраняются после обновления страницы (в случае sessionStorage) и даже после перезапуска браузера (при использовании localStorage). Скоро мы это увидим.
5+
Что в них важно - данные, которые в них записаны, сохраняются после обновления страницы (в случае `sessionStorage`) и даже после перезапуска браузера (при использовании `localStorage`). Скоро мы это увидим.
66

77
Но ведь у нас уже есть куки. Зачем тогда эти объекты?
88

9-
- В отличие от кук, объекты веб-хранилища не отправляются на сервер при каждом запросе. Поэтому мы можем хранить гораздо больше данных. Большинство браузеров могут сохранить как минимум 2 мегабайта данных (или больше), и этот размер можно поменять в настройках.
9+
- В отличие от куки, объекты веб-хранилища не отправляются на сервер при каждом запросе. Поэтому мы можем хранить гораздо больше данных. Большинство браузеров могут сохранить как минимум 2 мегабайта данных (или больше), и этот размер можно поменять в настройках.
1010
- Ещё одно отличие от куки - сервер не может манипулировать объектами хранилища через HTTP-заголовки. Всё делается при помощи JavaScript.
1111
- Хранилище привязано к источнику (домен/протокол/порт). Это значит, что разные протоколы или поддомены определяют разные объекты хранилища, и они не могут получить доступ к данным друг друга.
1212

@@ -19,7 +19,7 @@
1919
- `key(index)` -- получить ключ на заданной позиции.
2020
- `length` -- количество элементов в хранилище.
2121

22-
Как вы видите, интерфейс похож на `Map` (`setItem/getItem/removeItem`), но также запоминается порядок элементов, и можно получить доступ к элементу по индексу -- `key(index)`.
22+
Как видим, интерфейс похож на `Map` (`setItem/getItem/removeItem`), но также запоминается порядок элементов, и можно получить доступ к элементу по индексу -- `key(index)`.
2323

2424
Давайте посмотрим, как это работает.
2525

@@ -62,15 +62,15 @@ alert( localStorage.test ); // 2
6262
delete localStorage.test;
6363
```
6464

65-
Это возможно по историческим причинам и, как правило, работает, но обычно не рекомендуется по двум причинам:
65+
Это возможно по историческим причинам и, как правило, работает, но обычно не рекомендуется, потому что:
6666

67-
1. Если ключ генерируется пользователем, то он может быть каким угодно, включая `length` или `toString`, а также другой встроенный метод `localStorage`. В этом случае `getItem/setItem` сработают нормально, а вот чтение/запись как свойства объекта не пройдут:
67+
1. Если ключ генерируется пользователем, то он может быть каким угодно, включая `length` или `toString` или другой встроенный метод `localStorage`. В этом случае `getItem/setItem` сработают нормально, а вот чтение/запись как свойства объекта не пройдут:
6868
```js run
6969
let key = 'length';
7070
localStorage[key] = 5; // Ошибка, невозможно установить length
7171
```
7272

73-
2. Когда мы модифицируем данные, то срабатывает событие `storage`. Но это событие не происходит при записи без `setItem`, как свойство обычного объекта. Мы увидим это позже в этой главе.
73+
2. Когда мы модифицируем данные, то срабатывает событие `storage`. Но это событие не происходит при записи без `setItem`, как свойства объекта. Мы увидим это позже в этой главе.
7474

7575
## Перебор ключей
7676

@@ -89,7 +89,7 @@ for(let i=0; i<localStorage.length; i++) {
8989

9090
Другой способ - использовать цикл, как по обычному объекту `for key in localStorage`.
9191

92-
Здесь перебираются ключи, но вместе с этим выводится несколько встроенных полей, которые нам не нужны:
92+
Здесь перебираются ключи, но вместе с этим выводятся несколько встроенных полей, которые нам не нужны:
9393

9494
```js run
9595
// bad try
@@ -158,8 +158,8 @@ alert( JSON.stringify(localStorage, null, 2) );
158158

159159
- `sessionStorage` существует только в рамках текущей вкладки браузера.
160160
- Другая вкладка с той же страницей будет иметь другое хранилище.
161-
- Но оно разделяется между ифреймами на вкладке (при условии, что они из одного и того же источника).
162-
- Данные продолжают существовать после перезагрузки страницы, но не закрытия/открытия вкладки.
161+
- Но оно разделяется между ифреймами на той же вкладке (при условии, что они из одного и того же источника).
162+
- Данные продолжают существовать после перезагрузки страницы, но не после закрытия/открытия вкладки.
163163

164164
Давайте посмотрим на это в действии.
165165

@@ -175,11 +175,11 @@ sessionStorage.setItem('test', 1);
175175
alert( sessionStorage.getItem('test') ); // после обновления: 1
176176
```
177177

178-
...Но если вы откроете ту же страницу в другой вкладке и повторите получить данные снова, то код выше вернет `null`, что значит "ничего не найдено".
178+
...Но если вы откроете ту же страницу в другой вкладке и попробуете получить данные снова, то код выше вернет `null`, что значит "ничего не найдено".
179179

180180
Так получилось, потому что `sessionStorage` привязан не только к источнику, но и к вкладке браузера. Поэтому `sessionStorage` используется нечасто.
181181

182-
## Событие `storage`
182+
## Событие storage
183183

184184
Когда обновляются данные в `localStorage` или `sessionStorage`, генерируется событие [storage](https://www.w3.org/TR/webstorage/#the-storage-event) со следующими свойствами:
185185

@@ -189,7 +189,7 @@ alert( sessionStorage.getItem('test') ); // после обновления: 1
189189
- `url` – url документа, где произошло обновление.
190190
- `storageArea` – объект `localStorage` или `sessionStorage`, где произошло обновление.
191191

192-
Важно: событие срабатывает на всех объектах `window`, где доступно хранилище, а также там, где оно было вызвано.
192+
Важно: событие срабатывает на всех остальных объектах `window`, где доступно хранилище, кроме того окна, которое его вызвало.
193193

194194
Давайте уточним.
195195

@@ -213,7 +213,7 @@ localStorage.setItem('now', Date.now());
213213

214214
Обратите внимание, что событие также содержит: `event.url` - url-адрес документа, в котором данные обновились.
215215

216-
Также `event.storageArea` содержит объект хранилища - событие одно и то же для `sessionStorage` и `localStorage`, поэтому `storageArea` ссылается на то хранилище, которое было изменено. Мы можем захотеть что-то записать в ответ на изменения.
216+
Также `event.storageArea` содержит объект хранилища - событие одно и то же для `sessionStorage` и `localStorage`, поэтому `event.storageArea` ссылается на то хранилище, которое было изменено. Мы можем захотеть что-то записать в ответ на изменения.
217217

218218
**Это позволяет разным окнам одного источника обмениваться сообщениями.**
219219

@@ -224,7 +224,7 @@ localStorage.setItem('now', Date.now());
224224
Объекты веб-хранилища `localStorage` и `sessionStorage` позволяют хранить пары ключ/значение в браузере.
225225
- `key` и `value` должны быть строками.
226226
- Лимит 2 Мб+, зависит от браузера.
227-
- Данные могут храниться неограниченное время.
227+
- Данные не имеют "времени истечения".
228228
- Данные привязаны к источнику (домен/протокол/порт).
229229

230230
| `localStorage` | `sessionStorage` |
@@ -241,10 +241,10 @@ API:
241241
- `key(index)` -- получить ключ на заданной позиции.
242242
- `length` -- количество элементов в хранилище.
243243
- Используйте `Object.keys` для получения всех ключей.
244-
- Можно использовать ключи в качестве свойств объекта, в этом случае событие `storage` не срабатывает.
244+
- Можно обращаться к ключам как к обычным свойствам объекта, в этом случае событие`storage` не срабатывает.
245245

246246
Событие storage:
247247

248248
- Срабатывает при вызове `setItem`, `removeItem`, `clear`.
249-
- Содержит все данные об операции, `url` документа и объект хранилища.
250-
- Срабатывает на всех объектах `window`, которые имеют доступ к хранилищу, а также там, где оно было сгенерировано (на вкладке для `sessionStorage`, глобально для `localStorage`).
249+
- Содержит все данные об произошедшем обновлении (`key/oldValue/newValue`), `url` документа и объект хранилища `storageArea`.
250+
- Срабатывает на всех объектах `window`, которые имеют доступ к хранилищу, кроме того, где оно было сгенерировано (внутри вкладки для `sessionStorage`, глобально для `localStorage`).

0 commit comments

Comments
 (0)