定義
只讀的 localStorage 允許你訪問一個 Document 的遠端(origin)對象 Storage贯钩;數(shù)據(jù)存儲為跨瀏覽器會話办素。localStorage 類似于 sessionStorage,區(qū)別在于勺三,數(shù)據(jù)存儲在 localStorage 是無期限的需曾,而數(shù)據(jù)存儲在 sessionStorage 會被清除,當頁面會話結(jié)束時——也就是說當頁面被關閉商源。
屬性
length
localStorage 內(nèi)鍵值對的數(shù)量谋减。
localStorage.length // 0
localStorage.setItem('name', 'mazey')
localStorage.length // 1
方法
1.setItem(key, value)
新增/更新 localStorage 的鍵值對。
localStorage.setItem('name', 'mazey')
localStorage.setItem('age', '23')
localStorage // Storage {age: "23", name: "mazey", length: 2}
等同于:
localStorage.name = 'mazey'
localStorage.age = '23'
localStorage // Storage {age: "23", name: "mazey", length: 2}
2.getItem(key)
獲取 localStorage 中指定鍵的值庄吼。
localStorage.setItem('name', 'mazey')
localStorage.setItem('age', '23')
localStorage.getItem('name') // mazey
localStorage.getItem('age') // 23
localStorage.getItem('sex') // null
等同于:
localStorage.setItem('name', 'mazey')
localStorage.setItem('age', '23')
localStorage.name // mazey
localStorage['age'] // 23
localStorage.sex // undefined
3.removeItem(key)
移除 localStorage 中指定鍵的鍵值對霸褒。
localStorage.setItem('name', 'mazey')
localStorage.setItem('age', '23')
localStorage // Storage {age: "23", name: "mazey", length: 2}
localStorage.removeItem('age') // undefined
localStorage // {name: "mazey", length: 1}
localStorage.removeItem('age') // undefined
4.clear()
清空 localStorage 中所有鍵值對废菱。
localStorage.setItem('name', 'mazey')
localStorage.setItem('age', '23')
localStorage // Storage {age: "23", name: "mazey", length: 2}
localStorage.clear()
localStorage // Storage {length: 0}
存取對象(復雜值)
localStorage 只能存字符串抖誉,所以數(shù)組/對象等復雜值要先用 JSON.stringify() 轉(zhuǎn)換成字符串,取出來時再用 JSON.parse() 轉(zhuǎn)換成復雜值再使用旁理。
let arr = [1, 2, 3]
localStorage.setItem('arr', arr)
localStorage.getItem('arr') // "1,2,3"
// JSON.stringify()
localStorage.setItem('arr', JSON.stringify(arr))
localStorage.getItem('arr') // "[1,2,3]"
JSON.parse(localStorage.getItem('arr')) // [1, 2, 3]
瀏覽器標簽之前通信
讓 window 監(jiān)聽 localStorage 的 storage孽文,一個標簽的 localStorage 發(fā)生改變時,其它標簽做出相應的響應芋哭。
test0.html - 改變 localStorage。
<input type="text" id="input" />
<button onclick="setNameForStorage()">Set</button>
<script type="text/javascript">
function setNameForStorage () {
localStorage.name = document.querySelector('#input').value
}
</script>
test1.html - 響應 localStorage 的改變豌习。
<script type="text/javascript">
window.addEventListener('storage', e => {
console.log(e.key, e.newValue) // name 123
})
</script>
注意
- localStorage 只能同域名下使用肥隆,可以搭配 postMessage 和 iframe 實現(xiàn)跨域通信稚失。
- 低版本IE不支持 localStorage。
- 需在服務器環(huán)境下使用嘱巾,即不能在 file:// 等非正常環(huán)境下使用诫钓。
- 在移動端 localStorage(H5, IOS, Android)會發(fā)生不可預知的問題菌湃。