摘要:為本地存儲,是一種永久性存儲,除非手動清除。是會話存儲,當瀏覽器關閉后,存儲數據會自動清除。無需轉換數據類型獲取存儲的數據,無需指定鍵值。移除數據清空所有的存儲清空所有的存儲
localStoage為本地存儲,是一種永久性存儲,除非手動清除。sessionStorage是會話存儲,當瀏覽器關閉后,存儲數據會自動清除。兩種存儲方式幾乎都有相同的方法和屬性;
1.localStorage.length 和 sessionStorage.length : 返回本地存儲列表長度;需要說明的是可以通過localStorage對象獲取對應的存儲數據,比如已經存儲了一個鍵為name的數據,使用localStorage.name獲取存儲數據;下面的方法都是基于localStorage 對象 或 sessionStorage 對象;
2.getItem( keyName )方法:通過鍵獲取存儲的數據;
3.setItem( keyName,value )方法:存儲數據,keyName為存儲數據的鍵,value實際要存儲的數據(可以把keyName理解成 給要存儲的數據起的名字,便于管理);
4.removeItem( keyName )方法: 將指定鍵名的數據刪除;
5.clear() 方法:清空所有的存儲數據;
6.key() 方法: 獲取鍵值,需要注意的是并不能返回指定布爾值需要作進一步處理,下面是針對兩種不同的存儲方式使用統一的函數方式實現,歡迎各位提出意見。
7.es6 版本 發布在github 也可以使用 npm i -S feitools
https://github.com/lizhanyi/t...
/* 功能:拋出異常 , 調試使用 @param msg , 異常信息 */ throwError : function( msg ){ // 調試使用 throw new Error( msg ); } /* 功能:設置和獲取數據 @param key,存儲的鍵 @param value,待存儲的數據 @param boolean,區分對象sessionStorage和localStorage */ setItem : function( key, value/*, boolean*/ ){ var args = arguments, len = args.length, storage; len == 0 && this.throwError("Not enough arguments to Storage.getItem."); if( args[len-1] == true ){// 是session storage = window.sessionStorage; len == 1 && this.throwError("Not enough arguments to Storage.getItem."); len >= 3 && storage.setItem( args[0], args[1] ); if( len == 2 ) return storage.getItem( args[0] ); }else{// 是local storage = window.localStorage; len >= 2 && storage.setItem( args[0], args[1] ); if( len == 1 ) return storage.getItem( args[0] ); } } /* 功能:刪除存儲數據 @param key,待刪除的數據的鍵 @param boolean,區分對象sessionStorage和localStorage */ removeItem : function( key, boolean){ // 刪除指定 key 的存儲數據 var storage; boolean ? storage = window.sessionStorage : storage = window.localStorage; return storage.removeItem( key ); } clearItem : function(/*boolean*/){// 清空所有存儲 arguments[0] ? window.sessionStorage.clear() : window.localStorage.clear(); } /* 功能:判斷是否有某一鍵名的數據,若存儲數據存在返回true,否則返回false @param key,指定的鍵名 @param boolean,區分對象sessionStorage和localStorage 用這種方式判斷是否存儲了某個數據,應該會好于使用getItem()方法; */ getKey : function( keyName/*boolean*/){ // 獲取數據存儲的鍵 var temp, args = arguments; len = args.length; args[len-1] == true ? temp = window.sessionStorage : temp = window.localStorage; for(var i = 0; i < temp.length; i++) if( keyName == temp.key(i) ) return true; return false; }
上面的封裝在使用的時候有點糾結,使用多次和時間長的時候自己也不知道是使用了seeeion還是使用了local,所謂實踐是檢驗真理的唯一標準
優化一下代碼,使用構造函數方式實現
/* @param way,存儲方式,指定是session或local存儲 */ function Storage( way ){ this.map = { "session" : window.sessionStorage, "local" : window.localStorage }, this.getItem = function( key ){ return this.map[way].getItem( key ); }, this.setItem = function( key, value ){ this.map[way].setItem( key,value ) }, this.removeItem = function( key ){ this.map[way].removeItem( key ); }, this.clear = function(){ this.map[way].clear(); }, this.getKey = function( key ){ //var len = map.way.length; return key in map[way]; } }; var local = new Storage("local");// 創建一個本地存儲的實例 local.setItem("key","data");// 存儲數據 local.getItem("key"); // 獲取本地存儲數據 local.removeItem("key"); // 刪除鍵名為key的存儲數據 local.getKey("key"); // 判斷是否存在某一鍵的數據 local.clear();// 清空本地存儲(刪除所有的本地存儲的數據) var session = new Storage("session");// 創建一個session存儲的實例 session.setItem("key","data");// 存儲數據 session.getItem("key"); // 獲取session存儲數據 session.removeItem("key"); // 刪除鍵名為key的存儲數據 session.getKey("key"); // 判斷是否存在某一鍵的數據 session.clear();// 清空會話存儲(刪除所有的session存儲的數據)
繼續優化:(使用原型對象,共享屬性和方法)
function Storage( way ){ this.way = way; }; Storage.prototype.map = { "session" : window.sessionStorage, "local" : window.localStorage }; Storage.prototype.setItem = function( key, value){ this.map[this.way].setItem( key, value ) }; Storage.prototype.getItem = function( key ){ return this.map[this.way].getItem( key ); }; Storage.prototype.removeItem = function( key ){ this.map[this.way].removeItem( key ) }; Storage.prototype.clear = function(){ this.map[this.way].clear(); }; Storage.prototype.getKey = function( key ){ return key in this.map[this.way]; }; var local = new Storage("local");// 創建一個本地存儲的實例 local.setItem("key","data");// 存儲數據 local.getItem("key"); // 獲取本地存儲數據 local.removeItem("key"); // 刪除鍵名為key的存儲數據 local.getKey("key"); // 判斷是否存在某一鍵的數據 local.clear();// 清空本地存儲(刪除所有的本地存儲的數據)
再次優化代碼:(針對上面的寫法再來一次簡化)
function Storage( way ){ this.way = way; }; Storage.prototype = { map : { "session" : window.sessionStorage, "local" : window.localStorage }, setItem : function( key, value ){ this.map[this.way].setItem( key, value ) }, getItem : function( key ){ return this.map[this.way].getItem( key ); }, removeItem : function( key ){ this.map[this.way].removeItem( key ); }, clear : function(){ this.map[this.way].clear(); }, getKey : function( key ){ return key in this.map[this.way]; } }; Storage.prototype.constructor = Storage;
這樣看起來舒服多了,全部共享出去了,所有的實例都可以使用了,哈哈哈,親測可用,如遇到問題可以隨時交流,發現bug,也要及時反饋哈
關于prototype的幾點說明
只要函數被聲明了,就會產生對應的原型對象,即所有的函數都有原型對象,可以通過functionName.prototype訪問原型對象。既然functionName.prototype是對象那么就可以通過"."的方式設置屬性和方法如:
function People(){}; People.prototype.name = "阿里巴巴"; People.prototype.get = function(){ console.log(this.name); }; var people = new People(); // 實例化 console.log( people.name ); // 阿里巴巴 console.log( people.get() );// 阿里巴巴 console.log( people.constructor ); // People函數 console.log( people.__proto__.constructor ); // People函數
自定義方法優化
function Memory( key, way ){ this.way = way; this.key = key; }; Memory.prototype = { constructor : Memory, map : { "session" : window.sessionStorage, "local" : window.localStorage }, setItem : function( value ){ this.map[this.way].setItem( this.key, JSON.stringify( value ) ) }, getItem : function(){ return JSON.parse( this.map[this.way].getItem( this.key ) ); }, removeItem : function(){ this.map[this.way].removeItem( this.key ); }, clear : function(){ this.map[this.way].clear(); }, getKey : function(){ return this.key in this.map[this.way]; } }; var myStore = new Memory("key","session"); // 實例化一個對象,指定鍵值和存儲方式 myStore.setItem("value"); // 指定存儲的數據,可以是字符串、數字、json對象、數組。無需轉換數據類型 myStore.getItem(); // 獲取存儲的數據,無需指定鍵值。 myStore.removeItem(); // 移除數據 var session = new Memory("clear","session"); session.clear(); // 清空所有的 session 存儲 var local = new Memory("clear","local"); local.clear(); // 清空所有的 local 存儲
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82711.html
摘要:前端存儲和簡述曾在項目中多次使用過和來存放,但一直未深入了解。以為例他們均只能存儲字符串類型的對象存儲大小都為都遵守同源策略不同點有期限,當窗口或瀏覽器關閉時就會被銷毀。本文如有錯誤,歡迎指出。 H5前端存儲 localStorage 和 sessionStorage 簡述 曾在項目中多次使用過localStorage和sessionStorage來存放token,但一直未深入了解。近...
摘要:移動端緩存失效是我印象最深的一個之一,為啥呢,因為這個問題導致我加班到很晚。的生命周期是僅在當前會話下有效。引入了一個瀏覽器窗口的概念,是在同源的窗口中始終存在的數據。無bug,不程序:作為程序員的我,不是修bug就是在寫bug的路上。 移動端sessionStorage緩存失效是我印象最深的一個bug之一,為啥呢,因為這個問題導致我加班到很晚。在現在看來就是一個簡單的概念問題。在我剛工作...
摘要:的使用屬性允許你訪問一個對象。它與相似,不同之處在于里面存儲的數據沒有過期時間設置,而存儲在里面的數據在頁面會話結束時會被清除。頁面會話在瀏覽器打開期間一直保持,并且重新加載或恢復頁面仍會保持原來的頁面會話。 sessionStorge的使用 sessionStorage 屬性允許你訪問一個 session Storage 對象。它與 localStorage 相似,不同之處在于 lo...
摘要:的使用屬性允許你訪問一個對象。它與相似,不同之處在于里面存儲的數據沒有過期時間設置,而存儲在里面的數據在頁面會話結束時會被清除。頁面會話在瀏覽器打開期間一直保持,并且重新加載或恢復頁面仍會保持原來的頁面會話。 sessionStorge的使用 sessionStorage 屬性允許你訪問一個 session Storage 對象。它與 localStorage 相似,不同之處在于 lo...
摘要:的目的就是取代進行大量的本地數據存儲,其中不能進行跨會話存儲,這可以使用彌補。刪除由指定的名值對兒。使用方法存儲數據使用屬性存儲數據使用方法讀取數據使用屬性讀取數據一般來說,對存儲空間大小的限制都是以每個源協議域和端口為單位的。 前言 本文首先介紹web storage和Cookie的對比,解釋web storage的優勢;隨后指出怎樣使用插firebug插件的擴展firestorag...
閱讀 1953·2021-09-30 09:46
閱讀 1366·2019-08-30 15:43
閱讀 1123·2019-08-29 13:28
閱讀 1922·2019-08-29 11:24
閱讀 1681·2019-08-26 13:22
閱讀 3892·2019-08-26 12:01
閱讀 1816·2019-08-26 11:33
閱讀 3242·2019-08-23 15:34