先來幾道面試題
一、a.meituan.com
和b.meituan.com
這兩個域可以共享同一個localStorage
嗎?
二、在webview
中打開一個頁面:i.meituan.com/home.html
,點擊一個按鈕,調用js
橋打開一個新的webview:i.meituan.com/list.html
,這兩個分屬不一樣webview
的頁面能共享同一個localStorage
嗎?
三、若是localStorage
存滿了,再往裏存東西,或者要存的東西超過了剩餘容量,會發生什麼?
好了帶着這些問題咱們來往下看html
// 用於存入數據 window.localStorage.setItem('key', 'value'); // 用於讀取數據 window.localStorage.getItem('key') //清除某個鍵名對應的鍵值 localStorage.removeItem('key'); // 用於清除全部保存的數據 window.localStorage.clear() // localStorage.key()接受一個整數做爲參數(從零開始),返回該位置對應的鍵值。 localStorage.key(0) // Storage 接口儲存的數據發生變化時,會觸發 storage 事件,能夠指定這個事件的監聽函數。利用這個能夠實現跨tab頁通訊 window.addEventListener('storage', onStorageChange);
注意點:localStorage
只能存String類型的字符串。存對象的時候會變成"[object Object]"
,由於({key:'xxx'}).toString()//"[object Object]"
。這個時候咱們能夠經過JSON.stringify()
。來幫咱們實現轉化。例如:localStorage.setItem('jsonString', JSON.stringify({key: 'mtt'}))
localStorage
只要在相同的協議、相同的主機名、相同的端口下,就能讀取/修改到同一份localStorage
數據。這就回答了咱們上面的前二個問題了,
第一題:因爲域名不一樣,不能進行共享。
第二題:二個webview
至關於同一個瀏覽器的不一樣標籤頁。因此能夠共享。web
與sessionStorage
、cookie
對比面試
localstorage
在全部同源窗口中都是共享的;也就是說只要瀏覽器不關閉,數據仍然存在sessionStorage
:不能在不一樣的瀏覽器窗口中共享,即便是同一個頁面;cookie
: 也是在全部同源窗口中都是共享的.也就是說只要瀏覽器不關閉,數據仍然存在localStorage
理論上來講是永久有效的,即不主動清空的話就不會消失,即便保存的數據超出了瀏覽器所規定的大小,也不會把舊數據清空而只會報錯(這裏解答了上面的第三題)。但須要注意的是,在移動設備上的瀏覽器或各Native App
用到的WebView
裏,localStorage
都是不可靠的,可能會由於各類緣由(好比說退出App、網絡切換、內存不足等緣由)被清空。 json
與sessionStorage
、cookie
對比瀏覽器
sessionStorage
和localStorage
不會自動把數據發送給服務器,僅在本地保存。cookie
數據始終在同源的http
請求中攜帶(即便不須要),即cookie
在瀏覽器和服務器間來回傳遞。cookie
數據還有路徑(path)
的概念,能夠限制cookie
只屬於某個路徑下$ 五、存儲數據大小服務器
cookie
數據不能超過4K
,同時由於每次http
請求都會攜帶cookie
、因此cookie
只適合保存很小的數據,如會話標識。sessionStorage
和localStorage
雖然也有存儲大小的限制,但比cookie
大得多,能夠達到5M或更大Web Storage擁有setItem、getItem、removeItem、clear等方法,不像cookie須要本身封裝setCookie、getCookie等方法