【前端面试题】javascript中实现本地缓存的方法和区别
实现本地化存储的三种方法localStoragesessionStoragecookie
·
目录
实现本地化存储的三种方法
localStorage
sessionStorage
cookie
localStorage本地存储
localStorage方法存储的数据没有时间限制,除非你把他删掉要不然一直存在。
localStorage有setItem、getItem、removeItem和clear方法
localStorage.setItem
使用方式
localStorage.setItem(key,value);
代码
//setItem
localStorage.setItem('姓名','二琳');
localStorage.setItem('性别','女');
localStorage.setItem('学号','20191527');
结果

localStorage.getItem
使用方式
localStorage.getItem(key);
代码举例
//getItem
localStorage.getItem('姓名');
localStorage.getItem('性别');
localStorage.getItem('学号');
结果展示

localStorage.removeItem
使用方式
localStorage.removeItem(key);
代码举例
//removeItem
localStorage.removeItem('性别');
结果展示

localStorage.clear
使用方式
localStorage.clear();
代码举例
//clear
localStorage.clear();
结果展示

sessionStorage会话存储
sessionStorage使用方法和localStorage方法一样,都有getItem、setItem、removeItem和clear方法。
代码
//sessionStorage
//setItem key&value
sessionStorage.setItem('早饭','包子');
sessionStorage.setItem('价格',5);
sessionStorage.setItem('数量',2);
//getItem
sessionStorage.getItem('早饭');
sessionStorage.getItem('价格');
sessionStorage.getItem('数量');
//removeItem
sessionStorage.removeItem('数量');
//clear
sessionStorage.clear();
cookie
cookie没有以上方法,需要我们自己封装getCookie和setCookie,一点都不方便(he tui)
代码
setCookie getCookie delCookie
//cookie
//setCookie
var setCookie = function (key, value, day) {
var str = key + "=" + value;//拼接字符串 键名对于键值
if (day) {//判断是否设置cookie时间限制
var now = new Date();//获取当前天
now.setDate(now.getDate() + day);//加上传入的day,设置失效天数;
str += "; expires=" + now;//拼接字符串设置失效时间
}
document.cookie = str;//如果没有设置时间,直接插入cookie中
}
setCookie('cookie1', 255, 0);
//getCookie
var getCookie = function (key) {
var arr = document.cookie.split('; ');//正常控制台输出的cookie是个字符串,我们需要将其变成数组
for (var i = 0; i < arr.length; i++) {
var keys = arr[i].split('=');//将数组中的值 键名,键值分开插入新的数组
if (keys[0] == key) {//判断键名是否与我请求的cookie值相同
return keys[1];//相同返回键名对应的键值
}
}
}
console.log(getCookie('cookie1'));
//delCookie
var delCookie = function (key) {
setCookie(key, '', -1);//将value设置为null,事件就过期了
}
delCookie('cookie1');
结果
写完了记得要open with live Server

cookie的主要作用
Cookie主要用在以下三个方面:
- 会话状态管理(如用户登录状态、购物车、游戏分数和其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为)
区别
| localStorage | sessionStorage | cookie | |
| 变量生命周期 | 永久存储 | 浏览器窗口关闭后数据失效 | 有生命周期,可以设置过期时间 |
| 存储大小 | 一般5MB | 一般5MB | 一般4KB |
| 存储内容 | 存储用户浏览记录 | 存储用户浏览记录 | 存储用户登录信息 |
| 打开方式 | 本地打开 | 用liveserver打开 | |
| 与服务端的通信 | 仅在客户端(浏览器)中保存、不参与和服务器的通信 | 参与服务端通信,cookie会携带在HTTP头中,如果使用cookie保存过多的数据,会带来性能问题 | |
练习代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//localStorage
//setItem key&value
localStorage.setItem('姓名', '二琳');
localStorage.setItem('性别', '女');
localStorage.setItem('学号', 20191527);
//getItem
localStorage.getItem('姓名');
localStorage.getItem('性别');
localStorage.getItem('学号');
//removeItem
localStorage.removeItem('性别');
//clear
localStorage.clear();
//sessionStorage
//setItem key&value
sessionStorage.setItem('早饭', '包子');
sessionStorage.setItem('价格', 5);
sessionStorage.setItem('数量', 2);
//getItem
sessionStorage.getItem('早饭');
sessionStorage.getItem('价格');
sessionStorage.getItem('数量');
//removeItem
sessionStorage.removeItem('数量');
//clear
sessionStorage.clear();
//cookie
//setCookie
var setCookie = function (key, value, day) {
var str = key + "=" + value;//拼接字符串 键名对于键值
if (day) {//判断是否设置cookie时间限制
var now = new Date();//获取当前天
now.setDate(now.getDate() + day);//加上传入的day,设置失效天数;
str += "; expires=" + now;//拼接字符串设置失效时间
}
document.cookie = str;//如果没有设置时间,直接插入cookie中
}
setCookie('cookie1', 255, 0);
//getCookie
var getCookie = function (key) {
var arr = document.cookie.split('; ');//正常控制台输出的cookie是个字符串,我们需要将其变成数组
for (var i = 0; i < arr.length; i++) {
var keys = arr[i].split('=');//将数组中的值 键名,键值分开插入新的数组
if (keys[0] == key) {//判断键名是否与我请求的cookie值相同
return keys[1];//相同返回键名对应的键值
}
}
}
console.log(getCookie('cookie1'));
//delCookie
var delCookie = function (key) {
setCookie(key, '', -1);//将value设置为null,事件就过期了
}
delCookie('cookie1');
</script>
</body>
</html>
大家加油,祝大家早日拿到大厂offer!

更多推荐



所有评论(0)