开门见山,今天来讲一讲HTML5中的存储方式。前端开发者应该都知道,对于html的本地存储是HTML5中出现的新特性,并不是所有浏览器都支持,在开始写本地存储的时候,必须得检测一下浏览器对本地存储特性的支持性是否良好,根据支持情况选择不同的方案,以免造成不必要的麻烦。
在Web Storage API中,特定域名下的Storage数据库可以直接通过window对象访问。因此首先确定用户的浏览器是不支持Web Storage非常重要。代码示例如下:
1 2 3 4 5 6 7
| function checkStorageSupport(){ if(window.localStorage){ alert('This browser supports localStorage'); }else{ alert('This browser does not supports localStorage'); } }
|
上面只是说明了检测浏览是否支持localStorage,接下来,再详细扒一扒本地存储的API方法:
1 2 3 4 5
| setItem(key,val); removeItem(key); getItem(key); clear(); key(index);
|
上面的代码是通过setItem方法设置数据的,key为关键字类似字段名形式,val则表示相对应的值,不过在这里要提一下的是,这种方法设置的的数据都是以字符串的形式存储的。以上原生方法就介绍到这里。
下面我再说说一个非常实用的开源项目store.js,这个开源小库非常实用,那么我们开始吧
首先,先介绍一下关于store.js的简单API:(store.js exposes a simple API for cross browser local storage)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| store.set('username', 'marcus') store.get('username') store.remove('username') store.clear() store.set('user', { name: 'marcus', likes: 'javascript' }) var user = store.get('user') alert(user.name + ' likes ' + user.likes) store.getAll().user.name == 'marcus' store.forEach(function(key, val) { console.log(key, '==', val) })
|
基于这个开源库,我们检测浏览器是否支持本地存储的代码则更为简单了:
1 2 3 4 5
| if (!store.enabled) { alert('Local storage is not supported by your browser. Please disable "Private Mode", or upgrade to a modern browser.'); return ; }
|
以上是store.js的主要API,这些都不是重点,重点是我要基于这个开源小库封装一下自己的一个小方法,对于大部分人来说,或许这步是多余的,如有多余,请勿喷。。。。
由于通过store.js保存的数据是字符串形式的,所以我存储数据时做了如下处理:
1 2 3 4 5 6 7 8 9 10 11 12 13
| * [setStorage 利用store.js改进存储方法,用来存储json对象字符串] * @param {[type]} objName [存储的key值名字] * @param {[type]} key [存储json对象的key值] * @param {[type]} val [存储json对象的对应value值] */ var setStorage = function(objName,key,val){ var _data = {}; _data[objName] = {}; _data[objName].data = store.get(objName)||{}; _data[objName].data[key] = val; store.set(objName,_data[objName].data); };
|
估计有人看到上面的代码会有疑问,那就是store.js明明有自己的一套获取数据的方法,为什么还要重新写一个呢?
对于这个疑问,就让大家自己先思考一下吧,上面重新写的获取方法或许会对你有帮助哟!
总结:在我被要求优化一个组件的时候,里面有就一条,将数据存储到本地,我就用了store.js这个开源,挺方便的,不过随之在用的过程中遇到了不小的坑,可能是刚开始接触的时候对它的本质不太了解,所以才会掉进坑里去,上面自定义的存储数据方法是我解决坑的方案,用这个方法着实给我减轻了不小的负担。另外,希望这篇文章对前端的你有帮助!