本地存储

@LocalStorage
特点
.以值对 key-value pairs 的形式存储在本地
.是 window 的全局函数
.持久化保存,除非用户主动清除
.读取方便
.存储容量大,约20MB
.不会出现在请求头中,可以节省带宽
.不会被网络爬虫抓取
.不同浏览器保存的数据不能共享
.存的数据都是字符串 String!!!
常用方法
.如下表所示
常用方法
类别 说明
保存 localStorage.setItem(key,value)
获取 localStorage.getItem(key)
删除 localStorage.removeItem(key)
清空 localStorage.clear()
F12 → Application → Storage → Loacal Storage
浏览器调试时,console.log 的文字的颜色:黑色为字符串;蓝色为数字
可以根据索引获取:localStorage.key(n)
基本应用 Usage
.存的数据都是字符串 String!!!
数值 Number
设置
localStorage.setItem('num', 2114)
获取
let num = localStorage.getItem('num')
//如果数据不存在,返回null;如果存在返回字符串[黑色]
console.log(num);
//类型转换为数值型[蓝色]
console.log(Number(num));
字符串 String
设置
localStorage.setItem('str', 'male')
获取
let str = localStorage.getItem('str')
//如果数据不存在,返回null
console.log(str);
数组 Array
.直接存储会被转化为字符串
let arr = [1, 2, 3, 4, 5];
let res;
console.log('before set: ', arr);
localStorage.setItem('arr', arr)
res = localStorage.getItem('arr')
console.log('after get ', res);
.存储时,使用 JSON.stringify 将数据序列化处理后再保存,否则无法还原
//使用JSON.stringify转换
localStorage.setItem('arr1', JSON.stringify(arr));
.获取时,使用 JSON.parse 转换为原始数据类型;如果不解析仍然是字符串
// 使用JSON.parse解析
res = JSON.parse(localStorage.getItem('arr1'));
console.log('解析获取:res:', res);
兼容写法:如果为 null,则赋值为空数组
res = JSON.parse(localStorage.getItem('arr1')) || [];
对象 Object
.同数组一样,对象的保存和获取也要处理
.直接存储,查看时,显示为[object Object]
let obj = { name: 'glc' }
//使用JSON.stringify转换
localStorage.setItem('obj', JSON.stringify(obj))
// 使用JSON.parse解析
let obj1 = JSON.parse(localStorage.getItem('obj'))
console.log(obj1);
兼容写法:如果为 null,则赋值为空对象
obj1 = JSON.parse(localStorage.getItem('obj')) || {};
布尔 Boolean
设置
localStorage.setItem('bool', true)
获取
let bool = localStorage.getItem('bool')
//如果数据不存在,返回null
console.log(bool, Boolean(bool));
总结 Summary
数据的设置和获取默认都是为字符串
如果存储的是数值型数据,获取时应类型转换,如使用 Number() 转换为数字
复合数据类型如数组和对象,保存时应使用 JSON.stringify() 序列化处理;获取时应使用 JSON.parse() 解析;两者要配合使用
不管什么类型的数据,如果不存在,返回为null
练习 Homework
完成以上操作,体会本地存储的特点
体会保存数组对象 [{}] 的基本操作,并思考和其它数据类型的异同
创建一个登陆表单,实现保存用户名和密码的操作,以便于下次直接登陆