JavaScript使用localStorage存儲數(shù)據(jù)
背景
以前js都是 Session 和 Cookie 來存儲信息,仿佛我還停留在那個時候,一問同事有沒有新的solution,才知道現(xiàn)在已經(jīng)有 HTML5 localStorage 本地存儲 這個東西,可以在瀏覽器端儲存數(shù)據(jù)。
記得最早的Cookies只能存很小的東西,4KB的樣子,并且安全性很差,在IE6時代一個域名也只能二十個Cookies吧,限制挺大,當(dāng)然IE還有userData的東西,沒什么用。Flash也帶了一個Storage,相對比較大,空間是Cookie的25倍左右,當(dāng)時現(xiàn)在也廢棄Flash了。
到了H5時代,就統(tǒng)一了,LocalStorage一統(tǒng)天下。官方建議是每個網(wǎng)站 5MB ,非常大了,雖然瀏覽器設(shè)置會有差異,但是一般就存些JSON或者字符串或者緩存來說,足夠了。
HTML5 LocalStorage 本地存儲
- sessionStorage:保存的數(shù)據(jù)用于瀏覽器的一次會話,當(dāng)會話結(jié)束(通常是該窗口關(guān)閉),數(shù)據(jù)被清空;
- localStorage:保存的數(shù)據(jù)長期存在,下一次訪問該網(wǎng)站的時候,網(wǎng)頁可以直接讀取以前保存的數(shù)據(jù)。除了保存期限的長短不同,這兩個對象的屬性和方法完全一樣。
它們很像cookie機(jī)制的強(qiáng)化版,雖然能夠動用大得多的存儲空間。但是,與cookie一樣,它們也受同域限制。某個網(wǎng)頁存入的數(shù)據(jù),只有同域下的網(wǎng)頁才能讀取。
通過檢查window對象是否包含 sessionStorage 和 localStorage 屬性,可以確定瀏覽器是否支持這兩個對象。
function checkStorageSupport()
{
// sessionStorage
if (window.sessionStorage) {
return true;
} else {
return false;
}
// localStorage
if (window.localStorage) {
return true;
} else {
return false;
}
}
Storage 操作
sessionStorage 和 localStorage 保存的數(shù)據(jù),都以 “Key-Value鍵值對” 的形式存在。也就是說,每一項數(shù)據(jù)都有一個鍵名和對應(yīng)的值。所有的數(shù)據(jù)都是以文本格式保存。
//sessionStorage 操作
sessionStorage.setItem("key","value"); // setItem方法,存儲變量名為key,值為value的變量
var valueSession = sessionStorage.getItem("key"); // getItem方法,讀取存儲變量名為key的值
sessionStorage.removeItem('key'); // removeItem方法,刪除變量名為key的存儲變量
sessionStorage.clear(); // clear方法,清除所有保存數(shù)據(jù)
//localStorage 操作
localStorage.setItem("key","value"); // 存儲變量名為key,值為value的變量
localStorage.key = "value" // 同setItem方法,存儲數(shù)據(jù)
var valueLocal = localStorage.getItem("key"); // 讀取存儲變量名為key的值
var valueLocal = localStorage.key; // 同getItem,讀取數(shù)據(jù)
localStorage.removeItem('key'); // removeItem方法,刪除變量名為key的存儲變量
localStorage.clear(); // clear方法,清除所有保存的數(shù)據(jù)
// 利用length屬性和key方法,遍歷所有的數(shù)據(jù)
for(var i = 0; i < localStorage.length; i++)
{
console.log(localStorage.key(i));
}
// 存儲 localStorage 數(shù)據(jù)為 Json 格式
value = JSON.stringify(jsonValue); // 將 JSON 對象 jsonValue 轉(zhuǎn)化成字符串
localStorage.setItem("key", value); // 用 localStorage 保存轉(zhuǎn)化好的的字符串
// 讀取 localStorage 中 Json 格式數(shù)據(jù)
var value = localStorage.getItem("key"); // 取回 value 變量
jsonValue = JSON.parse(value); // 把字符串轉(zhuǎn)換成 JSON 對象
Storage 事件
當(dāng)儲存的數(shù)據(jù)發(fā)生變化時,會觸發(fā) storage 事件。我們可以指定這個事件的回調(diào)函數(shù)。
window.addEventListener("storage",onStorageChange);
回調(diào)函數(shù)接受一個event對象作為參數(shù)。這個event對象的key屬性,保存發(fā)生變化的鍵名。
function onStorageChange(e)
{
console.log(e.key);
}
除了key屬性,event對象的屬性還有三個:
- oldValue:更新前的值。如果該鍵為新增加,則這個屬性為null。
- newValue:更新后的值。如果該鍵被刪除,則這個屬性為null。
- url:原始觸發(fā)storage事件的那個網(wǎng)頁的網(wǎng)址。
!!! 特別注意的是,該事件不在導(dǎo)致數(shù)據(jù)變化的當(dāng)前頁面觸發(fā)。如果瀏覽器同時打開一個域名下面的多個頁面,當(dāng)其中的一個頁面改變sessionStorage或localStorage的數(shù)據(jù)時,其他所有頁面的storage事件會被觸發(fā),而原始頁面并不觸發(fā)storage事件??梢酝ㄟ^這種機(jī)制,實現(xiàn)多個窗口之間的通信。所有瀏覽器之中,只有IE瀏覽器除外,它會在所有頁面觸發(fā)storage事件。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript 本地存儲localStorage完全指南及應(yīng)用場景
- javascript中本地存儲localStorage,sessionStorage,cookie,indexDB的用法與使用場景匯總
- Javascript本地存儲localStorage看這一篇就夠了
- javascript中l(wèi)ocalStorage本地存儲(新增、刪除、修改)使用詳細(xì)教程
- JavaScript本地數(shù)據(jù)存儲sessionStorage與localStorage使用詳解
- JavaScript中本地存儲(LocalStorage)和會話存儲(SessionStorage)的使用
- JS localStorage存儲對象,sessionStorage存儲數(shù)組對象操作示例
- JavaScript和jQuery存儲localStorage的具體實現(xiàn)方法詳解
相關(guān)文章
jsonp跨域及實現(xiàn)百度首頁聯(lián)想功能的方法
這篇文章主要介紹了jsonp跨域及實現(xiàn)百度首頁聯(lián)想功能的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
attachEvent的使用方法與傳遞參數(shù)[IE|firefox]
attachEvent的使用方法與傳遞參數(shù)[IE|firefox]...2007-05-05
javascript 刪除數(shù)組中重復(fù)項(uniq)
巧妙去除數(shù)組中的重復(fù)項的方法參考,需要的朋友可以參考下。2010-01-01
詳解JavaScript實現(xiàn)繼承的五種經(jīng)典方式(附圖解)
JavaScript中的繼承是一種機(jī)制,通過它可以創(chuàng)建一個對象,該對象可以享有另一個對象的屬性和方法,本文將詳細(xì)的為大家介紹實現(xiàn)繼承的五種經(jīng)典方式,感興趣的小伙伴跟著小編一起來看看吧2023-08-08
詳解TypeScript如何正確使用Declare關(guān)鍵字
如果您編寫 TypeScript 代碼的時間足夠長,您就已經(jīng)看到過declare關(guān)鍵字,但它有什么作用,為什么要使用它呢,下面小編就來和大家簡單講講2023-08-08
跟我學(xué)習(xí)javascript的最新標(biāo)準(zhǔn)ES6
跟我學(xué)習(xí)javascript的最新標(biāo)準(zhǔn)ECMAScript 6,ES6(ECMAScript 6)是即將到來的新版本JavaScript語言的標(biāo)準(zhǔn),代號harmony,感興趣的小伙伴們可以參考一下2015-11-11

