ÐбÑекÑÑ Ð²ÐµÐ±-Ñ
ÑанилиÑа localStorage и sessionStorage позволÑÑÑ Ñ
ÑаниÑÑ Ð¿Ð°ÑÑ ÐºÐ»ÑÑ/знаÑение в бÑаÑзеÑе.
ЧÑо в ниÑ
важно â даннÑе, коÑоÑÑе в ниÑ
запиÑанÑ, ÑоÑ
ÑанÑÑÑÑÑ Ð¿Ð¾Ñле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑаниÑÑ (в ÑлÑÑае sessionStorage) и даже поÑле пеÑезапÑÑка бÑаÑзеÑа (пÑи иÑполÑзовании localStorage). СкоÑо Ð¼Ñ ÑÑо Ñвидим.
Ðо Ð²ÐµÐ´Ñ Ñ Ð½Ð°Ñ Ñже еÑÑÑ ÐºÑки. ÐаÑем Ñогда ÑÑи обÑекÑÑ?
- РоÑлиÑие Ð¾Ñ ÐºÑки, обÑекÑÑ Ð²ÐµÐ±-Ñ ÑанилиÑа не оÑпÑавлÑÑÑÑÑ Ð½Ð° ÑеÑÐ²ÐµÑ Ð¿Ñи каждом запÑоÑе. Ðменно поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ Ñ ÑаниÑÑ Ð³Ð¾Ñаздо болÑÑе даннÑÑ . ÐолÑÑинÑÑво ÑовÑеменнÑÑ Ð±ÑаÑзеÑов могÑÑ Ð²ÑделиÑÑ ÐºÐ°Ðº минимÑм 5 мегабайÑов даннÑÑ (или болÑÑе), и ÑÑÐ¾Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ поменÑÑÑ Ð² наÑÑÑÐ¾Ð¹ÐºÐ°Ñ .
- ÐÑÑ Ð¾Ð´Ð½Ð¾ оÑлиÑие Ð¾Ñ ÐºÑки â ÑеÑÐ²ÐµÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¼Ð°Ð½Ð¸Ð¿ÑлиÑоваÑÑ Ð¾Ð±ÑекÑами Ñ ÑанилиÑа ÑеÑез HTTP-заголовки. ÐÑÑ Ð´ÐµÐ»Ð°ÐµÑÑÑ Ð¿Ñи помоÑи JavaScript.
- Ð¥ÑанилиÑе пÑивÑзано к иÑÑоÑÐ½Ð¸ÐºÑ (домен/пÑоÑокол/поÑÑ). ÐÑо знаÑиÑ, ÑÑо ÑазнÑе пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¸Ð»Ð¸ Ð¿Ð¾Ð´Ð´Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð¿ÑеделÑÑÑ ÑазнÑе обÑекÑÑ Ñ ÑанилиÑа, и они не могÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм дÑÑг дÑÑга.
ÐбÑекÑÑ Ñ
ÑанилиÑа localStorage и sessionStorage пÑедоÑÑавлÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе меÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва:
setItem(key, value)â ÑÐ¾Ñ ÑаниÑÑ Ð¿Ð°ÑÑ ÐºÐ»ÑÑ/знаÑение.getItem(key)â полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе по клÑÑÑkey.removeItem(key)â ÑдалиÑÑ Ð´Ð°Ð½Ð½Ñе Ñ ÐºÐ»ÑÑомkey.clear()â ÑдалиÑÑ Ð²ÑÑ.key(index)â полÑÑиÑÑ ÐºÐ»ÑÑ Ð½Ð° заданной позиÑии.lengthâ колиÑеÑÑво ÑлеменÑов в Ñ ÑанилиÑе.
Ðак видим, инÑеÑÑÐµÐ¹Ñ Ð¿Ð¾Ñ
ож на Map (setItem/getItem/removeItem), но Ñакже позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑлеменÑÑ Ð¿Ð¾ индекÑÑ â key(index).
ÐавайÑе поÑмоÑÑим, как ÑÑо ÑабоÑаеÑ.
Ðемо localStorage
ÐÑновнÑе оÑобенноÑÑи localStorage:
- ÐÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð¾Ð´Ð¸Ð½ на вÑе вкладки и окна в ÑÐ°Ð¼ÐºÐ°Ñ Ð¸ÑÑоÑника (один и ÑÐ¾Ñ Ð¶Ðµ домен/пÑоÑокол/поÑÑ).
- ÐаннÑе не имеÑÑ ÑÑока давноÑÑи, по коÑоÑÐ¾Ð¼Ñ Ð¸ÑÑекаÑÑ Ð¸ ÑдалÑÑÑÑÑ. Ð¡Ð¾Ñ ÑанÑÑÑÑÑ Ð¿Ð¾Ñле пеÑезапÑÑка бÑаÑзеÑа и даже ÐС.
ÐапÑимеÑ, еÑли запÑÑÑиÑÑ ÑÑÐ¾Ñ ÐºÐ¾Ð´â¦
localStorage.setItem('test', 1);
â¦Ð закÑÑÑÑ/оÑкÑÑÑÑ Ð±ÑаÑÐ·ÐµÑ Ð¸Ð»Ð¸ оÑкÑÑÑÑ ÑÑ Ð¶Ðµ ÑÑÑаниÑÑ Ð² дÑÑгом окне, Ñо можно полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе ÑледÑÑÑим обÑазом:
alert( localStorage.getItem('test') ); // 1
Ðам доÑÑаÑоÑно Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð½Ð° Ñом же иÑÑоÑнике (домен/пÑоÑокол/поÑÑ), пÑи ÑÑом URL-пÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазнÑм.
ÐбÑÐµÐºÑ localStorage доÑÑÑпен вÑем окнам из одного иÑÑоÑника, поÑÑомÑ, еÑли Ð¼Ñ ÑÑÑанавливаем даннÑе в одном окне, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑановÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñми в дÑÑгом.
ÐоÑÑÑп как к обÑÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ
Также можно полÑÑаÑÑ/запиÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе, как в обÑÑнÑй обÑекÑ:
// ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение Ð´Ð»Ñ ÐºÐ»ÑÑа
localStorage.test = 2;
// полÑÑиÑÑ Ð·Ð½Ð°Ñение по клÑÑÑ
alert( localStorage.test ); // 2
// ÑдалиÑÑ ÐºÐ»ÑÑ
delete localStorage.test;
ÐÑо возможно по иÑÑоÑиÑеÑким пÑиÑинам и, как пÑавило, ÑабоÑаеÑ, но обÑÑно не ÑекомендÑеÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо:
-
ÐÑли клÑÑ Ð³ÐµÐ½ÐµÑиÑÑеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелем, Ñо он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ°ÐºÐ¸Ð¼ Ñгодно, вклÑÑаÑ
lengthилиtoStringили дÑÑгой вÑÑÑоеннÑй меÑодlocalStorage. Ð ÑÑом ÑлÑÑаеgetItem/setItemÑÑабоÑаÑÑ Ð½Ð¾ÑмалÑно, а Ð²Ð¾Ñ ÑÑение/запиÑÑ ÐºÐ°Ðº ÑвойÑÑва обÑекÑа не пÑойдÑÑ:let key = 'length'; localStorage[key] = 5; // ÐÑибка, невозможно ÑÑÑановиÑÑ length -
Ðогда Ð¼Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑÑем даннÑе, Ñо ÑÑабаÑÑÐ²Ð°ÐµÑ ÑобÑÑие
storage. Ðо ÑÑо ÑобÑÑие не пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿Ñи запиÑи безsetItem, как ÑвойÑÑва обÑекÑа. ÐÑ Ñвидим ÑÑо позже в ÑÑой главе.
ÐеÑÐµÐ±Ð¾Ñ ÐºÐ»ÑÑей
ÐеÑодÑ, коÑоÑÑе Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼, позволÑÑÑ ÑиÑаÑÑ/пиÑаÑÑ/ÑдалÑÑÑ Ð´Ð°Ð½Ð½Ñе. Ркак полÑÑиÑÑ Ð²Ñе знаÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ клÑÑи?
Ð ÑожалениÑ, обÑекÑÑ Ð²ÐµÐ±-Ñ ÑанилиÑа нелÑÐ·Ñ Ð¿ÐµÑебÑаÑÑ Ð² Ñикле, они не иÑеÑиÑÑемÑ.
Ðо можно пÑойÑи по ним, как по обÑÑнÑм маÑÑивам:
for(let i=0; i<localStorage.length; i++) {
let key = localStorage.key(i);
alert(`${key}: ${localStorage.getItem(key)}`);
}
ÐÑÑгой ÑпоÑоб â иÑполÑзоваÑÑ Ñикл, как по обÑÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ for key in localStorage.
ÐдеÑÑ Ð¿ÐµÑебиÑаÑÑÑÑ ÐºÐ»ÑÑи, но вмеÑÑе Ñ ÑÑим вÑводÑÑÑÑ Ð½ÐµÑколÑко вÑÑÑоеннÑÑ Ð¿Ð¾Ð»ÐµÐ¹, коÑоÑÑе нам не нÑжнÑ:
// bad try
for(let key in localStorage) {
alert(key); // Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ getItem, setItem и дÑÑгие вÑÑÑоеннÑе ÑвойÑÑва
}
â¦ÐоÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ нÑжно либо оÑÑилÑÑÑоваÑÑ Ð¿Ð¾Ð»Ñ Ð¸Ð· пÑоÑоÑипа пÑовеÑкой hasOwnProperty:
for(let key in localStorage) {
if (!localStorage.hasOwnProperty(key)) {
continue; // пÑопÑÑÑÐ¸Ñ Ñакие клÑÑи, как "setItem", "getItem" и Ñак далее
}
alert(`${key}: ${localStorage.getItem(key)}`);
}
â¦Ðибо пÑоÑÑо полÑÑиÑÑ Â«ÑобÑÑвеннÑе» клÑÑи Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Object.keys, а заÑем пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи вÑвеÑÑи Ð¸Ñ Ð¿Ñи помоÑи Ñикла:
let keys = Object.keys(localStorage);
for(let key of keys) {
alert(`${key}: ${localStorage.getItem(key)}`);
}
ÐоÑледнее ÑабоÑаеÑ, поÑÐ¾Ð¼Ñ ÑÑо Object.keys возвÑаÑÐ°ÐµÑ ÑолÑко клÑÑи, пÑинадлежаÑие обÑекÑÑ, игноÑиÑÑÑ Ð¿ÑоÑоÑип.
ТолÑко ÑÑÑоки
ÐбÑаÑиÑе внимание, ÑÑо клÑÑ Ð¸ знаÑение Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑоками.
ÐÑли Ð¼Ñ Ð¸ÑполÑзÑем лÑбой дÑÑгой Ñип, напÑÐ¸Ð¼ÐµÑ ÑиÑло или обÑекÑ, Ñо он авÑомаÑиÑеÑки пÑеобÑазÑеÑÑÑ Ð² ÑÑÑокÑ:
localStorage.user = {name: "John"};
alert(localStorage.user); // [object Object]
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ JSON Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов:
localStorage.user = JSON.stringify({name: "John"});
// немного позже
let user = JSON.parse( localStorage.user );
alert( user.name ); // John
Также возможно пÑивеÑÑи к ÑÑÑоке веÑÑ Ð¾Ð±ÑÐµÐºÑ Ñ ÑанилиÑа, напÑÐ¸Ð¼ÐµÑ Ð´Ð»Ñ Ð¾Ñладки:
// Ð´Ð»Ñ JSON.stringify Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¿Ð°ÑамеÑÑÑ ÑоÑмаÑиÑованиÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÐµÐºÑ Ð²ÑглÑдел лÑÑÑе
alert( JSON.stringify(localStorage, null, 2) );
sessionStorage
ÐбÑÐµÐºÑ sessionStorage иÑполÑзÑеÑÑÑ Ð³Ð¾Ñаздо Ñеже, Ñем localStorage.
СвойÑÑва и меÑÐ¾Ð´Ñ Ñакие же, но еÑÑÑ ÑÑÑеÑÑвеннÑе огÑаниÑениÑ:
sessionStorageÑÑÑеÑÑвÑÐµÑ ÑолÑко в ÑÐ°Ð¼ÐºÐ°Ñ ÑекÑÑей вкладки бÑаÑзеÑа.- ÐÑÑÐ³Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ° Ñ Ñой же ÑÑÑаниÑей бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð´ÑÑгое Ñ ÑанилиÑе.
- Ðо оно ÑазделÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð¸ÑÑеймами на Ñой же вкладке (пÑи ÑÑловии, ÑÑо они из одного и Ñого же иÑÑоÑника).
- ÐаннÑе пÑодолжаÑÑ ÑÑÑеÑÑвоваÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки ÑÑÑаниÑÑ, но не поÑле закÑÑÑиÑ/оÑкÑÑÑÐ¸Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ¸.
ÐавайÑе поÑмоÑÑим на ÑÑо в дейÑÑвии.
ÐапÑÑÑиÑе ÑÑÐ¾Ñ ÐºÐ¾Ð´â¦
sessionStorage.setItem('test', 1);
â¦Ð обновиÑе ÑÑÑаниÑÑ. ÐÑ Ð²ÑÑ ÐµÑÑ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе:
alert( sessionStorage.getItem('test') ); // поÑле обновлениÑ: 1
â¦Ðо еÑли Ð²Ñ Ð¾ÑкÑоеÑе ÑÑ Ð¶Ðµ ÑÑÑаниÑÑ Ð² дÑÑгой вкладке и попÑобÑеÑе полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе Ñнова, Ñо код вÑÑе веÑнÑÑ null, ÑÑо знаÑÐ¸Ñ Â«Ð½Ð¸Ñего не найдено».
Так полÑÑилоÑÑ, поÑÐ¾Ð¼Ñ ÑÑо sessionStorage пÑивÑзан не ÑолÑко к иÑÑоÑникÑ, но и к вкладке бÑаÑзеÑа. ÐоÑÑÐ¾Ð¼Ñ sessionStorage иÑполÑзÑеÑÑÑ Ð½ÐµÑаÑÑо.
СобÑÑие storage
Ðогда обновлÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñе в localStorage или sessionStorage, генеÑиÑÑеÑÑÑ ÑобÑÑие storage Ñо ÑледÑÑÑими ÑвойÑÑвами:
keyâ клÑÑ, коÑоÑÑй обновилÑÑ (null, еÑли вÑзван.clear()).oldValueâ ÑÑаÑое знаÑение (null, еÑли клÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ впеÑвÑе).newValueâ новое знаÑение (null, еÑли клÑÑ Ð±Ñл ÑдалÑн).urlâ url докÑменÑа, где пÑоизоÑло обновление.storageAreaâ обÑекÑlocalStorageилиsessionStorage, где пÑоизоÑло обновление.
Ðажно: ÑобÑÑие ÑÑабаÑÑÐ²Ð°ÐµÑ Ð½Ð° вÑеÑ
оÑÑалÑнÑÑ
обÑекÑаÑ
window, где доÑÑÑпно Ñ
ÑанилиÑе, кÑоме Ñого окна, коÑоÑое его вÑзвало.
ÐавайÑе ÑÑоÑним.
ÐÑедÑÑавÑÑе, ÑÑо Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð´Ð²Ð° окна Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же ÑайÑом. Ð¥ÑанилиÑе localStorage ÑазделÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе оÑкÑÑÑÑ ÑÑÑ ÑÑÑаниÑÑ Ð² двÑÑ Ð¾ÐºÐ½Ð°Ñ Ð±ÑаÑзеÑа, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ Ð¿ÑиведÑннÑй ниже код.
ТепеÑÑ, еÑли оба окна ÑлÑÑаÑÑ window.onstorage, Ñо каждое из ниÑ
бÑÐ´ÐµÑ ÑеагиÑоваÑÑ Ð½Ð° обновлениÑ, пÑоизоÑедÑие в дÑÑгом окне.
// ÑÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ñи обновлениÑÑ
, ÑделаннÑÑ
в Ñом же Ñ
ÑанилиÑе из дÑÑгиÑ
докÑменÑов
window.onstorage = event => { // можно Ñакже иÑполÑзоваÑÑ window.addEventListener('storage', event => {
if (event.key != 'now') return;
alert(event.key + ':' + event.newValue + " at " + event.url);
};
localStorage.setItem('now', Date.now());
ÐбÑаÑиÑе внимание, ÑÑо ÑобÑÑие Ñакже ÑодеÑжиÑ: event.url â url-адÑÐµÑ Ð´Ð¾ÐºÑменÑа, в коÑоÑом даннÑе обновилиÑÑ.
Также event.storageArea ÑодеÑÐ¶Ð¸Ñ Ð¾Ð±ÑÐµÐºÑ Ñ
ÑанилиÑа â ÑобÑÑие одно и Ñо же Ð´Ð»Ñ sessionStorage и localStorage, поÑÑÐ¾Ð¼Ñ event.storageArea ÑÑÑлаеÑÑÑ Ð½Ð° Ñо Ñ
ÑанилиÑе, коÑоÑое бÑло изменено. ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ заÑ
оÑеÑÑ ÑÑо-Ñо запиÑаÑÑ Ð² оÑÐ²ÐµÑ Ð½Ð° изменениÑ.
ÐÑо позволÑÐµÑ ÑазнÑм окнам одного иÑÑоÑника обмениваÑÑÑÑ ÑообÑениÑми.
СовÑеменнÑе бÑаÑзеÑÑ Ñакже поддеÑживаÑÑ Broadcast channel API ÑпеÑиалÑнÑй API Ð´Ð»Ñ ÑвÑзи Ð¼ÐµÐ¶Ð´Ñ Ð¾ÐºÐ½Ð°Ð¼Ð¸ одного иÑÑоÑника, он более полноÑÑнкÑионалÑнÑй, но менее поддеÑживаемÑй. СÑÑеÑÑвÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки (полиÑилÑ), коÑоÑÑе ÑмÑлиÑÑÑÑ ÑÑо API на оÑнове localStorage и делаÑÑ ÐµÐ³Ð¾ доÑÑÑпнÑм везде.
ÐÑого
ÐбÑекÑÑ Ð²ÐµÐ±-Ñ
ÑанилиÑа localStorage и sessionStorage позволÑÑÑ Ñ
ÑаниÑÑ Ð¿Ð°ÑÑ ÐºÐ»ÑÑ/знаÑение в бÑаÑзеÑе.
keyиvalueÐ´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑÑÑоками.- ÐÐ¸Ð¼Ð¸Ñ 5 Ðб+, завиÑÐ¸Ñ Ð¾Ñ Ð±ÑаÑзеÑа.
- ÐаннÑе не имеÑÑ Â«Ð²Ñемени иÑÑеÑениÑ».
- ÐаннÑе пÑивÑÐ·Ð°Ð½Ñ Ðº иÑÑоÑÐ½Ð¸ÐºÑ (домен/пÑоÑокол/поÑÑ).
localStorage |
sessionStorage |
|---|---|
| СовмеÑÑно иÑполÑзÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ñеми вкладками и окнами Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм иÑÑоÑником | РазделÑеÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ¸ бÑаÑзеÑа, ÑÑеди иÑÑеймов из Ñого же иÑÑоÑника |
| «ÐеÑеживаеÑ» пеÑезапÑÑк бÑаÑзеÑа | «ÐеÑеживаеÑ» пеÑезагÑÑÐ·ÐºÑ ÑÑÑаниÑÑ (но не закÑÑÑие вкладки) |
API:
setItem(key, value)â ÑÐ¾Ñ ÑаниÑÑ Ð¿Ð°ÑÑ ÐºÐ»ÑÑ/знаÑение.getItem(key)â полÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе по клÑÑÑkey.removeItem(key)â ÑдалиÑÑ Ð·Ð½Ð°Ñение по клÑÑÑkey.clear()â ÑдалиÑÑ Ð²ÑÑ.key(index)â полÑÑиÑÑ ÐºÐ»ÑÑ Ð½Ð° заданной позиÑии.lengthâ колиÑеÑÑво ÑлеменÑов в Ñ ÑанилиÑе.- ÐÑполÑзÑйÑе
Object.keysÐ´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ ÐºÐ»ÑÑей. - Ðожно обÑаÑаÑÑÑÑ Ðº клÑÑам как к обÑÑнÑм ÑвойÑÑвам обÑекÑа, в ÑÑом ÑлÑÑае ÑобÑÑие
storageне ÑÑабаÑÑваеÑ.
СобÑÑие storage:
- СÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ñи вÑзове
setItem,removeItem,clear. - СодеÑÐ¶Ð¸Ñ Ð²Ñе даннÑе об пÑоизоÑедÑем обновлении (
key/oldValue/newValue),urlдокÑменÑа и обÑÐµÐºÑ Ñ ÑанилиÑаstorageArea. - СÑабаÑÑÐ²Ð°ÐµÑ Ð½Ð° вÑеÑ
обÑекÑаÑ
window, коÑоÑÑе имеÑÑ Ð´Ð¾ÑÑÑп к Ñ ÑанилиÑÑ, кÑоме Ñого, где оно бÑло ÑгенеÑиÑовано (внÑÑÑи вкладки длÑsessionStorage, глобалÑно длÑlocalStorage).
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)