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 相关文章推荐
js 操作符汇总
Nov 08 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
js获取及判断键盘按键的方法
Dec 01 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
Bootstrap和Java分页实例第二篇
Dec 23 Javascript
移动端界面的适配
Jan 11 Javascript
bootstrap精简教程_动力节点Java学院整理
Jul 14 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
微信小程序image图片加载完成监听
Aug 31 Javascript
vue props 单项数据流实例分享
Feb 16 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
May 10 Javascript
JavaScript 类的封装操作示例详解
May 16 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图片验证码代码
2008/03/27 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
node.js实现端口转发
2016/04/14 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
JS实现无缝循环marquee滚动效果
2017/05/22 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
vue之数据交互实例代码
2017/06/20 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
音乐教学反思
2014/02/02 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
银行委托书范本
2014/04/04 职场文书
见习报告格式要求
2014/11/04 职场文书
长江三峡导游词
2015/01/31 职场文书
裁员通知
2015/04/25 职场文书
会计实训总结范文
2015/08/03 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js