localStorage
25884 ワード
window.localStorage
前述したように、グローバルオブジェクトとしてのwindowは省略できます.localStorage読み取り専用プロパティを使用して、ドキュメントソースのストレージオブジェクトにアクセスします.保存されたデータは、ブラウザセッション間で共有されます.localStorageはsessionStorageと似ていますが、localStorageのデータは期限切れではなく、sessionStorageのデータはページセッションの終了時(つまりページを閉じる時)に消失します.
現在のドメイン内のローカルストレージオブジェクトにアクセスします.
localStorageエントリを追加
(ローカルストレージでcreateを追加したい)
上に追加したlocalStorageエントリへのアクセス(読み取り)
ローカルストレージアイテムの削除
すべてのローカルストレージエントリを削除
localStorageキーを取得または設定する場合は、以下に示すように、通常のオブジェクトと同様の方法を使用できます.ユーザは、lengthまたはtoStringおよびlocalStorageの組み込みメソッドを鍵に設定することができる.これにより、getItem、setItemが正常に動作していても、通常のオブジェクトを処理するようにエラーが発生する可能性があります. のデータを変更すると、localStorageをオブジェクトとしてアクセスすると、このイベントは発生しません.
localStorageでは、キーを使用して値を取得、設定、削除できます.では、キー値全体をどのようにして取得しますか?
残念なことに、ローカルストレージオブジェクトはiterableオブジェクトではありません.
iterable object
反復可能オブジェクト(iterable,interruble)は、配列を一般化したオブジェクトである.「かわいい」という概念を使うと、どんなオブジェクトでも...複文に適しています.配列は代表的なかわいい.配列に加えて、多くの組み込みオブジェクトを繰り返すこともできます.文字列もかわいい例です.
ただし,配列のように処理すれば,完全なキー値を得ることができる.
localStorageのキーと値は文字列でなければなりません.数値やオブジェクトなどの他のデータ型を使用すると、自動的に文字列に変換されます.
前述したように、グローバルオブジェクトとしてのwindowは省略できます.localStorage読み取り専用プロパティを使用して、ドキュメントソースのストレージオブジェクトにアクセスします.保存されたデータは、ブラウザセッション間で共有されます.localStorageはsessionStorageと似ていますが、localStorageのデータは期限切れではなく、sessionStorageのデータはページセッションの終了時(つまりページを閉じる時)に消失します.
myStorage = window.localStorage;
// 현재 출처의 로컬 저장 공간에 접근할 수 있는 Storage 객체.
CRUDメソッド
現在のドメイン内のローカルストレージオブジェクトにアクセスします.
Create
localStorageエントリを追加
(ローカルストレージでcreateを追加したい)
localStorage.setItem('myCat', 'Tom');
Read
上に追加したlocalStorageエントリへのアクセス(読み取り)
const cat = localStorage.getItem('myCat');
Delete
ローカルストレージアイテムの削除
localStorage.removeItem('myCat');
Delete All
すべてのローカルストレージエントリを削除
localStorage.clear();
注意事項
通常のオブジェクトのように使用
localStorageキーを取得または設定する場合は、以下に示すように、通常のオブジェクトと同様の方法を使用できます.
// 키 설정하기
localStorage.test = 2;
// 키 얻기
alert( localStorage.test ); // 2
// 키 삭제하기
delete localStorage.test;
この方法は、互換性が低いため現在もサポートされていますが、以下の理由で推奨されません.let key = 'length';
localStorage[key] = 5; // TypeError: Cannot assign to read only property 'length'...
巡回キー
localStorageでは、キーを使用して値を取得、設定、削除できます.では、キー値全体をどのようにして取得しますか?
残念なことに、ローカルストレージオブジェクトはiterableオブジェクトではありません.
iterable object
反復可能オブジェクト(iterable,interruble)は、配列を一般化したオブジェクトである.「かわいい」という概念を使うと、どんなオブジェクトでも...複文に適しています.配列は代表的なかわいい.配列に加えて、多くの組み込みオブジェクトを繰り返すこともできます.文字列もかわいい例です.
ただし,配列のように処理すれば,完全なキー値を得ることができる.
for (let i=0; i<localStorage.length; i++) {
let key = localStorage.key(i);
alert(`${key}: ${localStorage.getItem(key)}`);
}
一般オブジェクトの処理と同様に、localStorage反復文でfor keyを使用しても完全なキー値が得られます.ただし、この方法では不要な組み込みフィールドを出力できます.// 좋지 않은 방법
for(let key in localStorage) {
alert(key);
// getItem, setItem 같은 내장 필드까지 출력됩니다.
// proxyConsoleLog.js:12 _ym32184394_lsid,
// _ym_uid, length, clear,
// getItem, key, removeItem, setItem ~~~
}
for keyin localStorageで文を繰り返すには、hasOwnPropertyを使用してプロトコル・タイプから継承フィールドを選択する必要があります.for(let key in localStorage) {
if (!localStorage.hasOwnProperty(key)) {
continue; // setItem, getItem 등의 키를 건너뜁니다.
}
alert(`${key}: ${localStorage.getItem(key)}`);
}
または次のようにObjectkeysで「自分」のkeyを取得し、巡回する方法を使うこともできます.let keys = Object.keys(localStorage);
for(let key of keys) {
alert(`${key}: ${localStorage.getItem(key)}`);
}
Object.keysはオブジェクトで定義されたキーのみを返すため、プロトタイプから継承されたキーは無視されます.文字列のみ使用
localStorageのキーと値は文字列でなければなりません.数値やオブジェクトなどの他のデータ型を使用すると、自動的に文字列に変換されます.
sessionStorage.user = {name: "John"};
alert(sessionStorage.user); // [object Object]
JSONを使用してオブジェクトを書き込むことができます.sessionStorage.user = JSON.stringify({name: "John"});
let user = JSON.parse( sessionStorage.user );
alert( user.name ); // John
また、ストレージオブジェクト全体を文字列に変換してデバッグすることもできます.実習
<!-- HTML code -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width-device-width", initial-scale="1.0">
<link rel="stylesheet" href="style.css">
<title>#4</title>
</head>
</html>
<body>
<form class="hidden" id="login-form">
<input
required
maxlength = "15"
type="text"
placeholder="what is your name?"
/>
<button>Log in</button>
</form>
<h1 class="hidden" id="greeting"></h1>
<script src="app.js"></script>
</body>
// JS code
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME = "hidden";
const USERNAME_KEY = "username";
function onLoginSubmit(event) {
event.preventDefault();
// 브라우저의 기본 동작을 막아준다. => 페이지 새로고침을 막아준다.
const username = loginInput.value;
localStorage.setItem(USERNAME_KEY, username);
paintGreetings(username);
}
function paintGreetings(username) {
loginForm.classList.add(HIDDEN_CLASSNAME);
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const saveUsername = localStorage.getItem(USERNAME_KEY);
if (saveUsername === null){
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit", onLoginSubmit);
} else {
paintGreetings(saveUsername);
// 사실 saveUsername은 로컬 스토리지에 저장되어 있으니
// 굳이 인자로 전해줄 필요가 없음
// 근데 그러면 로컬 스토리지를 두 번 열어봐야겠지
}
Reference
この問題について(localStorage), 我々は、より多くの情報をここで見つけました https://velog.io/@zwon/localStorageテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol