讓localStorage存取JSON更高效


要把一個obj對象存進localStorage,大致步驟是:obj => objStr=JSON.stringify(obj) => localStorage.setItem(name, objStr);

要把一個localStorage取出轉成obj對象,大致步驟是:objStr=localSotrage.getItem(name) => obj = JSON.parse(objStr);

現在看來好像沒什么問題,如果要修改localStorage中保存的obj的某個屬性時,那就要先取出,修改,再存進;這樣一來要寫大量的JSON轉換和localStorage存取代碼,而且還有承擔存取name寫錯的風險。那要解決這個問題,就把自帶方法封裝一下

var wrapJsonStorage = function(name) {
    var ls = localStorage, lo = ls.getItem(name) || '{}';
    try {
        lo = JSON.parse(lo);
        //判斷lo是否是對象
        lo = Object(lo) === lo ? lo : {};
    } catch(e) {
        lo = {};
    }
    return {
        has: function(attr) {
            return !!lo[attr];
        },
        get: function(attr) {
            return lo[attr];
        },
        set: function(attr, val) {
            lo[attr] = val;
            return this;
        },
        remove: function(attr) {
            delete lo[attr];
            return this;
        },
        clear: function() {
            lo = {};
            return this;
        },
        save: function() {
            //lo為空時則刪除localStorage
            if(this.size() > 0) {
                ls.setItem(name, JSON.stringify(lo));
            } else {
                ls.removeItem(name);
            }
            return this;
        },
        size: function() {
            return Object.keys(lo).length;
        },
        toJSON: function() {
            var o = {}, i;
            for(i in lo) {
                o[i] = lo[i];
            }
            return o;
        },
        toString: function() {
            return JSON.stringify(lo);
        }
    };
};

使用方法:

注:使用set,remove,clear方法后有調用save方法才會同步到localStorage,主要為了減少io次數,增加效率

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM