前端學習(八十二) DOM-資料儲存(Dom)
瀏覽器端的資料儲存,也就是Web Storage的用法
Storage例項物件一共有兩個(全域性物件):localStorage,sessionStorage,因為是全域性物件,所以可以通過winow.localStorage和window.sessionStorage來訪問
- localStorage:功能和sessionStorage相同,但是瀏覽器關閉,然後重新開啟後臺資料仍然存在
- sessionStorage:為每個給定的域維持一個獨立的儲存空間,該儲存空間在頁面會話期間可用,即只要瀏覽器處於開啟狀態,包括頁面的重新載入和恢復
方法
setItem()
接收一個鍵名和值作為引數,將會把鍵值對新增到儲存中,如果鍵值對已經存在,則更新覆蓋
localStorage.setItem('abc','abc')
鍵值都會以字串的形式儲存,如果不是則會轉換成字串再儲存,當然不一定會設定成功,假如設定失敗,則會丟擲QuotaExceededError錯誤,表示儲存空間滿
因為是一個物件,因此可以使用物件的方法設定屬性,比如localStorage.abc='abc',這些
getItem()
接收一個鍵名作為引數,返回鍵名對應的值,假如沒有對應的值,返回null
localStorage.getItem('abc')
removeItem()方法
接收一個鍵名作為引數,把該鍵名從儲存中刪除
localStorage.removeItem('abc')
clear()
清空儲存中所有的鍵名
localStorage.clear()
key()
接收一個整數n作為引數,並返回儲存中第n個鍵名,注意:由於鍵的順序是瀏覽器自己決定的,並不是使用者新增的順序,所以不要依賴這個方法
localStorage.key(0)
length屬性
返回一個整數,表示儲存在Storage物件中鍵值對的數量
localStorage.length
StorageEvent
當Storage物件發生變化時,丟擲的StorageEvent事件,利用這個事件可以作出對應操作,注意:當Storage物件發生變化,和它同域的,其他tab中開啟的頁面會收到StorageEvent事件,當前頁面是不會收到的
StorageEvent事件的屬性
屬性 | 說明 |
key | 發生變化的屬性,如果是clear方法,則該值為null |
oldValue | 舊值,如果是clear或者removeItem方法,則該值為null |
newValue | 新值,如果是clear方法,或者setItem設定的是一個新屬性時,該值為null |
url | 發生變化的Storage物件的所在頁面URL |
storageArea | 備操作的storage物件 |
示例
<input id="setNewDate" type="button" value="set new date">
<div id="now"></div>
<script>
window.addEventListener('storage',function (params) {
console.log(params.key,params.newValue,params.oldValue,params.storageArea,params.url);
},false)
function setNewDate(){
var newDate=new Date().toString();
localStorage.setItem('now',newDate);
document.getElementById('now').innerHTML = newDate;
}
//監聽按鈕事件
document.getElementById('setNewDate').addEventListener('click',setNewDate);
</script>
同步特性
Storage的所有方法都是同步的,意味著他們會阻塞主頁面的渲染以及其他操作
容量有限制
由於localStorage中的資料是要儲存到使用者電腦的磁碟上的,如果容量不限制,則攻擊者可以寫惡意程式碼將使用者的磁碟塞滿,因此通常容量大小不超過10M
使用場景
localStorage:可以把一些非必須的,但是又能提升使用者體驗的功能資料儲存到localStorage裡面,最常見的就是使用者自定義設定資訊(例如視訊或者圖片網站上使用者選擇的列表模式和圖片模式等)
sessionStorage:適合儲存在某次使用過程中,指揮用到一次的功能資料(例如,只有在頁面開啟後提示的廣告,只有當瀏覽器關閉後再開啟才會重新開啟)
注意:不要把敏感資料儲存在Storage中,比如公司的機密資料,使用者的隱私資料等等