一、什么是 localStorage、sessionStorage
在HTML5
中,新加入了localStorage
特性,这个特性主要是用作本地存储,解决了cookie
存储空间不足的问题(cookie
中每条cookie
存储空间为 4k),localStorage
中一般浏览器支持的是5M
大小,这个在不同的浏览器中localStorage
会有所不同。
二、localStorage 的优势与局限
localStorage
优势
localStorage
局限
针对不同浏览器,localstorage
大小不统一,并且在IE8
以上的 IE 版本才支持localStorage
属性;
目前所有的浏览器都会把localStorage
的值类型限定为string
类型,对于比较常见的JSON
对象类型需要一些转换;
localStorage
在浏览器隐私模式下面是不可读取的;
localStorage
本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡;
localStorage
不能被爬虫抓取到;
localStorage
与sessionStorage
的唯一一点区别就是localStorage
为永久性存储,而sessionStorage
当会话结束的时候,sessionStorage
中的键值对会被清空。
三、localStorage 应用
localStorage
在浏览器中的支持情况如下:
这里要特别声明一下,如果是使用 IE 浏览器的话,那么就要UserData
来作为存储,这里主要讲解的是localStorage
内容,所以userData
不做过多的解释,因为目前的IE6/IE7
属于淘汰的位置上,而且在如今的很多页面开发都会涉及到HTML5\CSS3
等新兴技术,所以在使用上面一般我们不会去对其进行兼容。
首先,在使用localStorage
的时候,需要判断浏览器是否支持localStorage
属性。
if(!window.localStorage){
alert("浏览器不支持localstorage");
return false;
}else{
//主逻辑业务
}
复制代码
localStorage
写入,localStorage
写入有三种方法,下面一一介绍下:
if (!window.localStorage) {
alert("浏览器不支持localstorage");
return false;
} else {
var storage = window.localStorage;
//写入a字段
storage["a"]=1;
//写入b字段
storage.a=1;
//写入c字段
storage.setItem("c",3);
console.log(typeof storage["a"]);
console.log(typeof storage["b"]);
console.log(typeof storage["c"]);
}
复制代码
运行后结果如下:
这里要特别说明一下localStorage
的使用也是遵循同源策略的,所以不同网站不能共用相同的localStorage
。
最后在控制台上面打印出来的结果是:
不知道有没有童鞋注意到,刚刚存储进去的是int
类型,但打印出来却是string
类型,这个与localStorage
本身特点有关,localStorage
只支持string
类型的存储。
localStorage
读取
if (!window.localStorage) {
alert("浏览器不支持localstorage");
} else {
var storage = window.localStorage;
//写入a字段
storage["a"] = 1;
//写入b字段
storage.a = 1;
//写入c字段
storage.setItem("c",3);
console.log(typeof storage["a"]);
console.log(typeof storage["b"]);
console.log(typeof storage["c"]);
//第一种方法读取
var a = storage.a;
console.log(a);
//第二种方法读取
var b = storage["b"];
console.log(b);
//第三种方法读取
var c = storage.getItem("c");
console.log(c);
}
复制代码
上面演示了对localStorage
的三种存储/读取方式,官方推荐getItem\setItem
这方法对其进行存取。
前面说过localStorage
相当于前端数据库,数据库主要是CRUD
,这里的读取和写入就相当于增、查两个步骤。
接下来谈下localStorage
的删、改操作:
改这个步骤比较好理解,思路跟重新更改全局变量一样:
if (!window.localStorage) {
alert("浏览器不支持localstorage");
} else {
var storage = window.localStorage;
//写入a字段
storage["a"] = 1;
//写入b字段
storage.b = 1;
//写入c字段
storage.setItem("c",3);
console.log(storage.a);
// console.log(typeof storage["a"]);
// console.log(typeof storage["b"]);
// console.log(typeof storage["c"]);
/*分割线*/
storage.a = 4;
console.log(storage.a);
}
复制代码
在控制台可看到 a 键已经被更改为 4。
localStorage
的删除
1、将localStorage
所有内容清除
var storage = window.localStorage;
storage.a = 1;
storage.setItem("c",3);
console.log(storage);
storage.clear();
console.log(storage);
复制代码
2、 将localStorage
中某个键值对删除
var storage = window.localStorage;
storage.a = 1;
storage.setItem("c",3);
console.log(storage);
storage.removeItem("a");
console.log(storage.a);
复制代码
控制台查看结果
localStorage
键值获取
var storage = window.localStorage;
storage.a = 1;
storage.setItem("c",3);
for(var i = 0; i < storage.length; i++){
var key = storage.key(i);
console.log(key);
}
复制代码
使用key()
方法,向其中输入索引即可获取对应的键值。
四、localStorage 注意事项
一般我们会将JSON
存入localStorage
中,但是在localStorage
会自动将localStorage
转换成为字符串形式。
这个时候可以使用JSON.stringify()
,将JSON对象
转换成为JSON字符串
。
示例:
if (!window.localStorage) {
alert("浏览器不支持localstorage");
} else {
var storage = window.localStorage;
var data = {
name:'SHQ5785',
sex:'man',
hobby:'program'
};
var d = JSON.stringify(data);
storage.setItem("data",d);
console.log(storage.data);
}
复制代码
读取之后,使用JSON.parse()
方法将JSON字符串
转换成为JSON对象
:
var storage = window.localStorage;
var data = {
name:'SHQ5785',
sex:'man',
hobby:'program'
};
var d = JSON.stringify(data);
storage.setItem("data",d);
//将JSON字符串转换成为JSON对象输出
var json = storage.getItem('data');
var jsonObj = JSON.parse(json);
console.log(typeof jsonObj);
复制代码
打印出来是Object
对象。
需要注意的是,JS
数组本质上也是对象类型,所以上面的代码对数组也是适用的。
var arra = [1,2,3,4];
localStorage.setItem('key',JSON.stringify(arra));
var read=JSON.parse(localStorage.getItem('key'));
console.log(read,read.length);
复制代码
溢出处理
try {
localStorage.setItem(key,value);
} catch(oException) {
if (oException.name == 'QuotaExceededError') {
console.log('已经超出本地存储限定大小!');
// 可进行超出限定大小之后的操作,如下面可以先清除记录,再次保存
localStorage.clear();
localStorage.setItem(key,value);
}
}
复制代码
评论