一篇文章学会LocalStorage
【简介】
LocalStorage,即本地存储,详见: https://developer.mozilla.org/zh-CN/docs/Web/API/Window/localStorage
【cookie vs LocalStorage】
服务端是否可以获取?
|—cookie:服务端可以获取,每次请求默认会携带cookie内容
|—LocalStorage:服务端无法获取
存储大小
|—cookie:4096字节
|—LocalStorage:5M
有效期
|—cookie:可以设置有效期
|—LocalStorage:默认无法设置有效期
【LocalStorage使用】
LocalStorage使用比较简单,如下
// set
localStorage.setItem("myCat", "Tom");
// get
const cat = localStorage.getItem("myCat");
// remove
localStorage.removeItem("myCat");
// clear
localStorage.clear();
【LocalStorage存储数字】
这里需要注意,LocalStorage最终保存的是字符串,所以一些涉及数字的操作要小心哦
// set
localStorage.setItem("number", 1);
// get,这里返回的是:'1'
localStorage.getItem("number");
【LocalStorage存储对象】
由于LocalStorage最终保存的是字符串,所以如果直接存储对象,获取到的内容如下
// set
localStorage.setItem("obj", {});
// get,这里返回的是:'[object Object]'
localStorage.getItem("obj");
对于需要保存对象的场景,可以这么做
// set
localStorage.setItem("obj", JSON.stringify({}));
// get,这里返回的是{}
JSON.parse(localStorage.getItem("obj"));
通过使用JSON的stringify和parse方法,保存和获取对象
【LocalStorage查看】
通过以上的内容已经可以设置LocalStorage了,设置完成后可以在chrome devtool中查看到,如下
Application-Storage-Local Storage中

【LocalStorage存储大小】
上面说到LocalStorage可以存储不超过5M大小的内容,这个限制是否准确,如何验证?
可以本地写一段代码测试,例如找一个20k的文件,写入LocalStorage大约300次,看是否可以写入成功,
代码如下,这里value可以找一个压缩过的js文件内容,例如axios的内容
const value = `axios.js content`;
const count = 300;
for (let i = 0; i < count; i++) {
localStorage.setItem(`key${i}`, value);
}
发现写入到266次时报错,如下

大概换算一下(20K*266)/ 1024 = 5.19M
所以可以证明LocalStorage设置大小的内容上限是5M
【LocalStorage设置过期时间】
上面说到cookie支持设置过期时间,但是LocalStorage不支持设置过期时间,
如果需要为LocalStorage设置过期时间,应该怎么做呢?
可以自己定制一个get,set方法,在方法内人为的添加过期时间,如下
/**
* set item
* name
* value
* expires, ms
*/
function setItem(name, value, expires) {
if (!localStorage) {
console.log("unsupport localStorage");
return;
}
const obj = {};
obj.value = value;
if (expires) obj.expires = Date.now() + expires;
localStorage.setItem(name, JSON.stringify(obj));
}
/**
* get item
* name
*/
function getItem(name) {
if (!localStorage) {
console.log("unsupport localStorage");
return;
}
const objStr = localStorage.getItem(name);
let obj;
try {
obj = JSON.parse(objStr);
} catch (e) {
console.log("json parse error:");
console.log(e);
}
if (!obj) return;
if (obj.expires && obj.expires < Date.now()) {
localStorage.removeItem(name);
return;
}
return obj.value;
}
【qiao.ls.js】
封装了一个npm包,欢迎使用, https://code.insistime.com/#/qiao.ls.js
|— 简化set操作
// q
import { ls } from "qiao.ls.js";
// set
ls("name", "value");
|— 简化get操作
// q
import { ls } from "qiao.ls.js";
// get
console.log(ls("name")); // value
|— 简化del操作
// delete
ls("name", null);
console.log(ls("name")); // undefined
|—支持直接存取对象
// set obj
ls("obj", {});
// get obj
ls("obj"); // {}
|— 支持设置过期时间
// set 10s expires
ls("name", "value", 10 * 1000);
|—支持commonjs语法
// --cjs
// q
const q = require("qiao.ls.js");
// set
q.ls("name", "value");
// set 10s expires
q.ls("name", "value", 10 * 1000);
// get
console.log(q.ls("name")); // value
// delete
q.ls("name", null);
console.log(q.ls("name")); // undefined
|—支持es6 module语法
// --mjs
// q
import { ls } from "qiao.ls.js";
// set
ls("name", "value");
// set 10s expires
ls("name", "value", 10 * 1000);
// get
console.log(ls("name")); // value
// delete
ls("name", null);
console.log(ls("name")); // undefined
【总结】
- LocalStorage使用介绍
- LocalStorage和cookie的对比
- LocalStorage存储数字类型
- LocalStorage存储对象类型
- LocalStorage在chrome devtool下查看
- LocalStorage容量不超过5M验证
- LocalStorage设置过期时间
- LocalStorage工具&增强: https://code.insistime.com/#/qiao.ls.js
相关推荐
小巧的JS测试框架:AVA
【前言】 常见的JS测试框架有Jest,Mocha等, 今天介绍一个小巧的JS测试框架:ava, https://github.com/avajs/ava
规范的代码提交:Conventional Commits
【前言】 本文介绍如何提交规范的commit msg, 规范的commit msg可以看这个网站: https://www.conventionalcommits.org/en/v1.0.0/ 【commitizen】 可以手动提交符合规范的commit msg,如下 手动提交符合规范的msg比较麻
一篇文章开发todolist
【前言】 本文实战开发一个todolist, 基于以下技术栈: react:开发ui, https://reactjs.org/ webpack,构建前端项目, https://webpack.js.org/ localStorage,存储数据, https://developer.mozilla.
一篇文章学会IndexedDB
【简介】 IndexedDB,web端可以直接使用的数据库,详见: https://developer.mozilla.org/zhCN/docs/Web/API/IndexedDB\API 【IndexedDB vs LocalStorage】 之前介绍了LocalStorage:一篇文章学会lo
初始化前端Monorepos项目
【前言】 本文记录初始化一个前端Monorepos项目的过程 【LICENSE】 如果是开源项目, 需要添加LICENSE, 一般推荐使用MIT LICENSE, 模板如下, 其中copyright那一行, 可以替换为自己的信息。 【git】 git的一些基础设置 设置git账号信息 配置gitig
一篇文章判断用户是否在线
【前言】 如何判断用户在线,而不是用户网络是否连通, 在线:连网,可以访问internet 连通:连网,不能访问internet 【是否在线】 如上,判断是否在线,需要检测是否可以访问internet nodejs 在nodejs下,可以通过ping一些常见的域名来确定, 这里封装了一个工具, ht
mantine-ui快速上手
【前言】 2023年,前端开发的ui框架应该用哪个呢, 一些基本的诉求: 1.支持pc和移动端 2.支持黑夜&白天主题切换 3.组件丰富 4.支持react 4是技术栈选择,非通用 按以上要求在github上快速搜索下react相关ui库, 从start数,issues数,最后commit时间等维度
前端Monorepos项目使用npm-workspaces
【前言】 之前一直使用 lerna 来管理前端 monorepos 项目, 今天升级 lerna 后发现不支持 bootstrap 命令了, 替换为了 npm 的 workspaces 相关命令。 【lerna bootstrap】 lerna 的相关使用可以看这篇文章, 一文学会用Lerna管理多
Nx-VS-Lerna
【前言】 nx和lerna都是优秀的monorepos工具, 本文来对比一下两者的不同, https://nx.dev/ https://lerna.js.org/ 对比之前可以先看下面两篇文章, 了解nx和lerna的基本使用, 一文学会用Lerna管理多个npm包 强大的构建系统:NX 【任务执
强大的构建系统:NX
【前言】 nx是一个强大的构建系统, 这么说可能比较模糊, 本文实践一个项目,带大家了解nx, 感兴趣的也可以自己探索: https://nx.dev/ nx一些典型的应用场景: 1.基于package的monorepo管理 2.完整的前端项目管理 3.react,angular等项目管理 4.no
一篇文章了解JS并行任务
【前言】 在开发过程中大部分场景是顺序执行代码, 也有场景要求并行执行多个任务, 本文研究下如何高效的并行执行任务。 【并行场景】 常见并行执行任务的场景 1.并行执行多个请求 2.并行下载文件 【并行任务】 上述场景中任务的共同点是 1.多个任务没有依赖关系 2.多个任务完成耗时不确定 3.要求最
一篇文章学会Webpack5.x
【前言】 Web前端构建离不开webpack, 众所周知webpack的配置很多很复杂, 甚至可以设置“webpack配置工程师”, 本文抓住webpack核心概念, 和业务开发中常用配置进行讲解, 争取一篇文章学会webpack使用和配置。 【常用文档】 webpack官网 webpack手册:可