JavaScript使用localStorage存储数据


Posted in Javascript onSeptember 25, 2019

背景

以前js都是 SessionCookie 来存储信息,仿佛我还停留在那个时候,一问同事有没有新的solution,才知道现在已经有 HTML5 localStorage 本地存储 这个东西,可以在浏览器端储存数据。

记得最早的Cookies只能存很小的东西,4KB的样子,并且安全性很差,在IE6时代一个域名也只能二十个Cookies吧,限制挺大,当然IE还有userData的东西,没什么用。Flash也带了一个Storage,相对比较大,空间是Cookie的25倍左右,当时现在也废弃Flash了。

到了H5时代,就统一了,LocalStorage一统天下。官方建议是每个网站 5MB ,非常大了,虽然浏览器设置会有差异,但是一般就存些JSON或者字符串或者缓存来说,足够了。

HTML5 LocalStorage 本地存储

  • sessionStorage:保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;
  • localStorage:保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的属性和方法完全一样。

它们很像cookie机制的强化版,虽然能够动用大得多的存储空间。但是,与cookie一样,它们也受同域限制。某个网页存入的数据,只有同域下的网页才能读取。

通过检查window对象是否包含 sessionStorage 和 localStorage 属性,可以确定浏览器是否支持这两个对象。

function checkStorageSupport()
{
 // sessionStorage
 if (window.sessionStorage) {
  return true;
 } else {
  return false;
 }
 
 // localStorage
 if (window.localStorage) {
  return true;
 } else {
  return false;
 }
}

Storage 操作

sessionStorage 和 localStorage 保存的数据,都以 “Key-Value键值对” 的形式存在。也就是说,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存。

//sessionStorage 操作
sessionStorage.setItem("key","value");     // setItem方法,存储变量名为key,值为value的变量
var valueSession = sessionStorage.getItem("key");  // getItem方法,读取存储变量名为key的值
sessionStorage.removeItem('key');      // removeItem方法,删除变量名为key的存储变量
sessionStorage.clear();        // clear方法,清除所有保存数据
//localStorage 操作
localStorage.setItem("key","value");     // 存储变量名为key,值为value的变量
localStorage.key = "value"        // 同setItem方法,存储数据
var valueLocal = localStorage.getItem("key");   // 读取存储变量名为key的值
var valueLocal = localStorage.key;      // 同getItem,读取数据
localStorage.removeItem('key');      // removeItem方法,删除变量名为key的存储变量
localStorage.clear();         // clear方法,清除所有保存的数据

// 利用length属性和key方法,遍历所有的数据
for(var i = 0; i < localStorage.length; i++)
{
 console.log(localStorage.key(i));
}

// 存储 localStorage 数据为 Json 格式
value = JSON.stringify(jsonValue);      // 将 JSON 对象 jsonValue 转化成字符串
localStorage.setItem("key", value);     // 用 localStorage 保存转化好的的字符串

// 读取 localStorage 中 Json 格式数据
var value = localStorage.getItem("key");    // 取回 value 变量
jsonValue = JSON.parse(value);      // 把字符串转换成 JSON 对象

Storage 事件

当储存的数据发生变化时,会触发 storage 事件。我们可以指定这个事件的回调函数。

window.addEventListener("storage",onStorageChange);

回调函数接受一个event对象作为参数。这个event对象的key属性,保存发生变化的键名。

function onStorageChange(e)
{
  console.log(e.key); 
}

除了key属性,event对象的属性还有三个:

  • oldValue:更新前的值。如果该键为新增加,则这个属性为null。
  • newValue:更新后的值。如果该键被删除,则这个属性为null。
  • url:原始触发storage事件的那个网页的网址。

!!! 特别注意的是,该事件不在导致数据变化的当前页面触发。如果浏览器同时打开一个域名下面的多个页面,当其中的一个页面改变sessionStorage或localStorage的数据时,其他所有页面的storage事件会被触发,而原始页面并不触发storage事件。可以通过这种机制,实现多个窗口之间的通信。所有浏览器之中,只有IE浏览器除外,它会在所有页面触发storage事件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 获取checkbox的checked问题
Nov 16 Javascript
Extjs407 getValue()和getRawValue()区别介绍
May 21 Javascript
jQuery实现点击该行即可删除HTML表格行
Oct 17 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
JS中的作用域链
Mar 01 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
原生JS实现京东查看商品点击放大
Dec 21 Javascript
Vue路由守卫之路由独享守卫
Sep 25 #Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
Sep 25 #Javascript
Vue利用Blob下载原生二进制数组文件
Sep 25 #Javascript
layui实现图片虚拟路径上传,预览和删除的例子
Sep 25 #Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 #Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
Sep 25 #Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 #Javascript
You might like
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php缓存技术详细总结
2013/08/07 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
作为网站管理者应当如何防范XSS
2014/08/16 面试题
公司同意接收函
2014/01/13 职场文书
说明书怎么写
2014/05/06 职场文书
关于建议书的格式范文
2014/05/20 职场文书
学前班学生评语
2014/12/29 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers
MySQL事务的隔离级别详情
2022/07/15 MySQL