当前位置: 首页 > news >正文

前端存储 - localStorage

发布自 Kindem的博客,欢迎大家转载,但是要注意注明出处

localStorage 介绍

在HTML5中,引入了两个新的前端存储特性:

  • localStorage
  • sessionStorage

这两者非常相似,都是用来在前端保存一定量的数据,称为前端存储,但是这两者仍然存在一定区别:

  • 生命周期:

    • localStorage: localStorage的生命周期是永久的,即使关闭页面、浏览器,其中的内容也不会消失,除非手动删除localStorage中的内容
    • sessionStorage: sessionStorage的生命周期是一次浏览器窗口会话,浏览器窗口指的是一组同源页面(来自于一个域名)的浏览器页面集合,当这些窗口全部关闭之后,sessionStorage的内容将不会存在
  • 存储大小:

    • 两者都为5MB/域名
  • 存储位置:

    • 两者都保存在客户端,不与服务器进行交互
  • 存储内容类型:

    • 两者都只能存储字符串,但是可以通过类型转换来存储各类数据
  • 获取方式:

    • localStorage: window.localStorage
    • sessionStorage: sessionStorage

可见localStorage适合在前端存储长时间使用的数据, 而sessionStorage适合存储短期使用、一次性的数据

另外这里要提一句,sessionStorage并不是session:

  • sessionStorage中的‘session’是指浏览器窗口会话,而后者的‘session’指的是服务器会话
  • 前者是前端存储,与服务器无关,而后者的实现依赖于服务器

这里只介绍更加常用的localStorage的使用,而sessionStorage的使用其实也类似

localStorage的使用

localStorage作为一个在HTML5中引入的特性,在IE6/7等一些低版本的浏览器中是无法被支持的,所以建议在使用localStorage之前先检查浏览器支持情况:

if (!window.localStorage) {
    // 当浏览器不支持 localStorage ...
} else {
    // 浏览器支持 localStorage ...
}

localStorage的使用也很简单,在localStorage中,数据都是以键值对的形式存在,可以使用json对象的形式直接对localStorage中的键值对进行操作:

// 设置数据
localStorage.a = 'hello';
localStorage.b = 'zero';
// 读取数据
console.log(localStorage.a);
console.log(localStorage.b);

就那么简单

但是这里要注意一点,存储在localStorage中的数据一定是以字符串形式存在的,所以当你存入/读取其他形式的数据时,需要进行类型转换才行:

// 存入 json 数据
localStorage.jsonTest = JSON.stringify({
    a: 'hello',
    b: 'zero'
});

// 读取 json 数据
console.log(JSON.parse(localStorage.jsonTest).a);
console.log(JSON.parse(localStorage.jsonTest).b);

使用js库来操作localStorage

有很多js库提供了一系列简化localStorage并且提供跨平台操作的功能,使用它们可以更加轻易地使用localStorage,这里介绍一个js库——store.js

store.js 的一大优点就是他将为你自动进行类型转换,相当于你可以直接在 localStorage 中储存诸如 json 对象等类型的数据,这些对你来说是透明的

安装:

npm install store

API:

// 引入
let store = require('store');

// 设置数据
store.set('user', {
    name: 'Kindem'
});

// 获取数据
let obj = store.get('user');

// 删除数据
store.remove('user');

// 删除所有数据
store.clearAll();

// 遍历键值对
store.each((value, key) => {
    // do something ...
});

参考

  • https://www.cnblogs.com/cencenyue/p/7604651.html
  • https://www.cnblogs.com/st-leslie/p/5617130.html
  • http://www.w3school.com.cn/html5/html_5_webstorage.asp
  • https://www.npmjs.com/package/store

相关文章:

  • Xamarin Essentials教程剪贴板Clipboard
  • ES6 系列之迭代器与 for of
  • CSS 全解析实战(三)-CSS 基础
  • 用栅栏(CyclicBarrier)实现高并发测试
  • Kudu vs HBase
  • springboot系列(一) Spring Boot浅谈(转载)
  • UITableView 的头视图和分区视图
  • 进击的 JavaScript(四) 之 闭包
  • netty源码分析
  • Android开发 Firebase动态链接打开APP
  • js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细)
  • 数据结构之串
  • Linux命令三剑客
  • 我的免费静态博客
  • 崛起于Springboot2.X之配置文件详解(10)
  • 收藏网友的 源程序下载网
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • avalon2.2的VM生成过程
  • CSS3 变换
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • iOS小技巧之UIImagePickerController实现头像选择
  • Node + FFmpeg 实现Canvas动画导出视频
  • Node 版本管理
  • Odoo domain写法及运用
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redux系列x:源码分析
  • Spring声明式事务管理之一:五大属性分析
  • use Google search engine
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 跨域
  • 每天10道Java面试题,跟我走,offer有!
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • ​香农与信息论三大定律
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • $.ajax中的eval及dataType
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (42)STM32——LCD显示屏实验笔记
  • (8)STL算法之替换
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)http-server应用
  • (转)创业的注意事项
  • (转载)虚函数剖析
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET业务框架的构建
  • .net中应用SQL缓存(实例使用)
  • //解决validator验证插件多个name相同只验证第一的问题
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ 数据结构 - C++] AVL树原理及实现
  • [20150321]索引空块的问题.txt
  • [Android 数据通信] android cmwap接入点
  • [AutoSar NVM] 存储架构
  • [AutoSar]工程中的cpuload陷阱(三)测试