解決localstorage存儲boolean類型值的小坑
localstorage存儲boolean類型值小坑
今天使用localstorage存儲boolean數(shù)據(jù)時,發(fā)現(xiàn)怎么弄頁面上數(shù)據(jù)顯示就是有問題。
后面才發(fā)現(xiàn),在localstorage中存儲的boolean數(shù)據(jù)都變成了字符串了,才導致的。
所以"true"=true及"false"==false,“true”==false顯示都為false。
localstorage使用不嚴謹之坑
上線新版本后,發(fā)現(xiàn)極個別“老”用戶在微信瀏覽器中無法打開我們網(wǎng)站的首頁。在經(jīng)過一番線上文件代理替
換后,終于發(fā)現(xiàn)了問題所在。
問題代碼段:
if(localstorage.getItem("things")){ var things = localstorage.getItem("things"); use(things); //緩存用一次就刪除 localstorage.removeItem('things'); }else{ use(newData); }
這段代碼乍一看沒什么問題,但是有隱患。在老版本中,localstorage中存的things內(nèi)容如下:
{ name:'px', age:'25' }
但是到了新版本,由于需求問題,這個緩存的值改變了,變成了如下結構:
{ username:'px', myage:'25' }
這樣就導致了在使用use函數(shù)處理things的時候報錯了,導致后面的removeItem永遠不執(zhí)行,所以緩存的這段數(shù)據(jù)在代碼中永遠不被清除,use函數(shù)一直使用舊的數(shù)據(jù)進行渲染,這樣就一直報錯,永遠無法使用新數(shù)據(jù)。
這里有兩點需要改進的
* 給緩存加版本號 * 用變量讀取緩存后,立刻清除緩存
優(yōu)化后的代碼如下:
//先判斷緩存版本號 if(localstorage.getItem("version") == curVersion){ if(localstorage.getItem("things")){ var things = localstorage.getItem("things"); //立刻清除 localstorage.removeItem('things'); use(things); }else{ use(newData); } }else{ localstorage.removeItem('things'); use(newData); }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JavaScript比較當前時間是否在指定時間段內(nèi)的方法
這篇文章主要介紹了JavaScript比較當前時間是否在指定時間段內(nèi)的方法,涉及javascript時間與字符串的轉(zhuǎn)換及比較操作相關技巧,需要的朋友可以參考下2016-08-08js實現(xiàn)的GridView即表頭固定表體有滾動條且可滾動
實現(xiàn)GridView,表頭固定,表體有滾動條且可滾動,下面有個不錯的示例,希望對大家有所幫助2014-02-02JS實現(xiàn)屏蔽網(wǎng)頁右鍵復制及ctrl+c復制的方法【2種方法】
這篇文章主要介紹了JS實現(xiàn)屏蔽網(wǎng)頁右鍵復制及ctrl+c復制的方法,結合實例形式分析了2種比較常用的屏蔽復制功能的技巧,需要的朋友可以參考下2016-09-09JavaScript callback回調(diào)函數(shù)用法實例分析
這篇文章主要介紹了JavaScript callback回調(diào)函數(shù)用法,結合實例形式分析了callback回調(diào)函數(shù)的概念、功能、應用場景及相關使用技巧,需要的朋友可以參考下2018-05-05