localStorage和sessionStorage区别和使用

2023-05-16

一、什么是localStorage

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

二、localStorage、sessionStorage的优势与局限

localStorage的优势

1、localStorage拓展了cookie的4K限制

2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的

localStorage的局限

1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性

2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换

3、localStorage在浏览器的隐私模式下面是不可读取的

4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡

5、localStorage不能被爬虫抓取到

三、localStorage、sessionStorage的不同点和相同点

相同:

1.操作方法都是一样

setItem('myCat', 'Tom'); //增加, 或者改
getItem('myCat'); // 查
removeItem('myCat'); // 删
clear(); // 移除全部

2.储存方式:键值对总是以字符串的形式存储。 (需要注意, 和js对象相比, 键值对总是以字符串的形式存储意味着数值类型会自动转化为字符串类型).

不同:

1.生命周期不同:localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对会被清空(所以有些时候sessionStorage会用来储存用户的账号和密码)

2.作用域不同:当相同浏览器,相同协议,域名,端口的情况下:不用的Tabs页面(俗话:打开相同的好几个页面),localStorage数据是共享的,sessionStorage是不共享的

这里我们以localStorage使用方法来分析

兼容

IE8.0+

写入(增)

if (!window.localStorage) {
  alert("浏览器支持localstorage");
  return false;
} else {
  var storage = window.localStorage;
  //写入a字段
  storage["a"] = 1;
  //写入b字段
  storage.a = 1;
  //写入c字段
  storage.setItem("c", 3);
  console.log(typeof storage["a"]);
  console.log(typeof storage["b"]);
  console.log(typeof storage["c"]);
}

查看地址

注意

  • 由于localStorage的使用也是遵循同源策略的,所以不同的网站直接是不能共用相同的localStorage
  • 不知道各位读者有没有注意到,刚刚存储进去的是int类型,但是打印出来却是string类型,这个与localStorage本身的特点有关,localStorage只支持string类型的存储

读取(查)

if (!window.localStorage) {
  alert("浏览器支持localstorage");
} else {
  var storage = window.localStorage;
  //写入a字段
  storage["a"] = 1;
  //写入b字段
  storage.a = 1;
  //写入c字段
  storage.setItem("c", 3);
  console.log(typeof storage["a"]);
  console.log(typeof storage["b"]);
  console.log(typeof storage["c"]);
  //第一种方法读取
  var a = storage.a;
  console.log(a);
  //第二种方法读取
  var b = storage["b"];
  console.log(b);
  //第三种方法读取
  var c = storage.getItem("c");
  console.log(c);
}

其中官方推荐的是getItem\setItem这两种方法对其进行存取

直接改就OK了

if(!window.localStorage){
  alert("浏览器支持localstorage");
}else{
  var storage=window.localStorage;
  //写入a字段
  storage["a"]=1;
  //写入b字段
  storage.b=1;
  //写入c字段
  storage.setItem("c",3);
  console.log(storage.a);
  // console.log(typeof storage["a"]);
  // console.log(typeof storage["b"]);
  // console.log(typeof storage["c"]);
  /*分割线*/
  storage.a=4;
  console.log(storage.a);
}

删除

分2个情况 1.全部删除 2.删除某一个字段

1.全部删除 clear()

var storage = window.localStorage;
storage.a = 1;
storage.setItem("c", 3);
console.log(storage);
storage.clear();
console.log(storage);

2.删除某一个键值对 removeItem()

var storage = window.localStorage;
storage.a = 1;
storage.setItem("c", 3);
console.log(storage);
storage.removeItem("a");
console.log(storage.a);

获取键 

key(),向其中出入索引即可获取对应的键

var storage = window.localStorage;
storage.a = 1;
storage.setItem("c", 3);
for (var i = 0; i < storage.length; i++) {
  var key = storage.key(i);
  console.log(key);
}

四、localStorage关于返回字符串注意事项

对象的时候(数组也是一样的)

 一般我们会将JSON存入localStorage中,但是在localStorage会自动将localStorage转换成为字符串形式

这个时候我们可以使用JSON.stringify()这个方法,来将JSON转换成为JSON字符串

if (!window.localStorage) {
  alert("浏览器支持localstorage");
} else {
  var storage = window.localStorage;
  var data = {
    name: 'xiecanyong',
    sex: 'man',
    hobby: 'program'
  };
  var d = JSON.stringify(data);
  storage.setItem("data", d);
  console.log(storage.data);
}

读取之后要将JSON字符串转换成为JSON对象,使用JSON.parse()方法

var storage = window.localStorage;
var data = {
  name: 'xiecanyong',
  sex: 'man',
  hobby: 'program'
};
var d = JSON.stringify(data);
storage.setItem("data", d);
//将JSON字符串转换成为JSON对象输出
var json = storage.getItem("data");
var jsonObj = JSON.parse(json);
console.log(typeof jsonObj);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

localStorage和sessionStorage区别和使用 的相关文章

  • 贪心算法的改进

    关于贪心算法 xff0c 请看我的上一篇博客 解决贪心算法的复杂度 为解决贪心算法的复杂度 本文提出 xff1a 通过分解极大联通子图去寻找影响力最大的节点的算法 强连通 xff1a 在有向图G中 xff0c 如果任意两个不同的顶点相互可达
  • 非关系型数据库-redis应用场景

    关系型数据库与非关系型数据库 redis的应用场景 xff1a 1 redis由于数据的读取和操作都在内存当中操作 xff0c 读写的效率较高 xff0c 所以经常被用来做数据的缓存 把一些需要频繁访问的数据 xff0c 而且在短时间之内不
  • Linux创建用户后,登录报错/usr/bin/xauth: file /home/user/.Xauthority does not exist

    错误信息如下 usr bin xauth span class token function file span home user Xauthority does not exist 错误原因 是因为添加用户时没有授权对应的目录 xff0
  • VSCode测试ES6语法

    一 VsCode使用 1 1 VsCode基本操作 Alt 43 Shift 43 F格式化代码 二 ES6新特性 2 1 let声明常量 2 2 const声明常量 只读变量 2 3 解析表达式 2 3 1 数组解构 2 3 2 对象解构
  • VNC远程连接树莓派报错问题解决(文末有惊喜呦)

    用VNC远程连接树莓派 xff0c 出现拒绝连接 问题原因 xff1a 只设置了PC端的服务器 xff0c 但是没有在树莓派端开端口 解决办法 xff1a 用putty或者xshell连接树莓派 xff0c 输入命令 xff1a vncse
  • ReadFile函数

    函数功能 xff1a 该函数从文件指针指示的位置开始从文件读数据 xff0c 在读操作完成后 xff0c 如果文件句柄不是用重叠属性来创建 xff0c 则文件指针用实际读的字数来调整 如果文件句柄为重叠的输入和输出 xff08 I O xf
  • error MSB8041: 此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。

    最近新安装了vs2019企业版 xff0c 用vs打开vs2015的工程出现如下错误 xff1a error MSB8041 此项目需要 MFC 库 从 Visual Studio 安装程序 单个组件选项卡 为正在使用的任何工具集和体系结构
  • PC和Android模拟器之间虚拟串口通信

    前言 很多时候我们在做串口通信的时候需要去模拟串口来调试 xff0c 这样可以极大的方便我们的工作 xff0c 不然的话可能需要连接硬件设备 xff0c 比较麻烦 一般情况下我们先在电脑上模拟串口后初步调试 xff0c 最后阶段在硬件设备上
  • 【C语言】将正数转成负数,将负数转成正数

    将正数转成负数 xff0c 将负数转成正数 include lt stdio h gt int change int num if num lt 0 num 61 num 1 else if num gt 0 num 61 num 43 1
  • C语言中的输入输出流和缓冲区(重点)详解

    导读 xff1a C语言中我们用到的最频繁的输入输出方式就是scanf 与printf scanf xff1a 从标准输入设备 键盘 读取数据 xff0c 并将值存放在变量中 printf xff1a 将指定的文字 字符串输出到标准输出设备
  • MFC下按钮自绘的实现

    MFC下按钮自绘的实现 MFC下按钮自绘的实现 xff08 一 xff09 在MFC下编程 xff0c 很多时候对于标准的按钮控件不是很满意 xff0c 想要弄的美观点 这就需要按钮自绘 这里简单记录一下方法 xff0c 以免过个十天半个月
  • Invalidaterect()函数的作用详细解释

    函数原型 xff1a BOOLInvalidateRect HWND hWnd handle of window withchanged update region 窗口句柄 CONST RECT lpRect address ofrect
  • 【Python小白学习——错误解决3】RuntimeWarning: More than 20 figures have been opened

    待解决的问题 xff1a RuntimeWarning More than 20 figures have been opened Figures created through the pyplot interface 96 matplo
  • ffmpeg修改视频文件的分辨率

    在本文中 xff0c 我们将展示如何调整任何视频文件的大小 这种方法是在Linux系统 xff08 几乎任何发行版 xff09 中调整视频文件大小的最佳方法之一 xff0c 也是Windows和Mac用户的绝佳替代方案 更改视频文件的分辨率
  • SQLServer安装教程(史上最详细版本)

    下载 安装包已上传至百度网盘 xff0c 安装包里已含注册码 xff0c 下载地址 xff08 含注册码 xff09 链接 xff1a https pan baidu com s 147YRI7DdCqTOTKfe9UNtiA 提取码 xf
  • 通过 GetFileVersionInfo 获取EXE 或 DLL的各种资源

    查找网上资源甚多 xff0c 但无一个代码能用 xff0c 甚憾 自已阅读MSDN资料 xff0c 终于写得下面代码 xff0c 经测试通过 xff0c 若有问题请发邮件给我 xff0c 谢谢 xff01 struct LANGANDCOD
  • Tab控件的使用(二)

    tab控件其实只是提供了一组标签按钮 xff0c 其相互切换有响应的消息 xff0c 而且实现了对这些按钮管理的功能 至于通过这些标签按钮来管理我们自己的界面那就要我们通过其提供的各种方法自己实现了 xff0c 这一方面减轻了tab控件自身
  • (转载)MFC -- radio button 的用法

    本文转自http cao416451347ming blog 163 com blog static 1154556162009102795016258 先为对话框加上2个radio button xff0c 分别是Radio1和Radio
  • Linux给普通用户添加sudo权限

    在对 Linux 进行各种操作时 xff0c 为了安全起见 xff0c 一般不使用root用户直接对系统进行操作 原因 在linux中root的权限非常大 xff0c 比如我们常开玩笑的命令 rm rf xff0c 这都是可以直接执行的 而
  • Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    1 socket概念 socket xff08 套接字 xff09 xff0c 用于网络中不同主机间进程的通信 socket是一个伪文件 xff0c 包含读缓冲区 写缓冲区 socket必须成对出现 socket可以建立主机进程间的通信 x

随机推荐

  • MySQL client does not support authentication protocol requested by server问题解决

    问题描述 xff1a 1251 Client does not support authentication protocol reuqested by server consider upgrading MySQL client 问题分析
  • kubernetes--集群环境搭建

    本文将搭建一套master node node k8s集群环境 xff0c 需要准备三台至少cpu gt 2G mem gt 2G的虚拟机 xff0c 步骤如下 xff1a 1 在所有节点配置hosts并节点间的连接性 分别在三个节点配置h
  • 数据库服务器的安装与配置

    理论基础 数据库服务器是当今应用最为广泛的一种服务器类型 xff0c 许多企业在信息化建设过程中都要购置数据库服务器 数据库服务器主要用于存储 查询 检索企业内部的信息 xff0c 因此需要搭配专用的数据库系统 xff0c 对服务器的兼容性
  • IDEA刷新与清除缓存

    idea清除缓存 刷新项目 idea刷新与清除缓存的正确菜单 Build Project xff1a 更新Project下所有的Module Build Module xff1a 更新指定的Module Rebuild Project xf
  • VNC远程桌面安装配置

    VNC远程桌面安装配置 服务器 xff1a Linux centos 7 0 客户端 xff1a Windows 10 1 服务器安装vnc服务端2 编辑vnc配置文件3 客户端安装4 解决端口访问的问题 1 服务器安装vnc服务端 直接用
  • 第1章 计算机基础知识

    1 1 计算机的基本概念 xff08 1 xff09 计算机的发展 计算机的诞生 1946年第一台电子数字计算机ENIAC由美国宾夕法尼亚大学研制成功 它是一个庞然大物 xff0c 共有18000个电子管 1500个继电器 xff0c 耗电
  • WIN7系统下搭建Docker,部署ODL与mininet

    1 docker 安装 版本 xff1a 18 03 win7系统下和win10系统稍有不同 安装流程 xff1a https www runoob com docker windows docker install html 由于国外源问
  • Debian10中文环境配置

    在安装系统的时候会有一个语言区域选项 xff0c 不管当时选的什么 xff0c 在这里都可以更改 同时解决中文乱码问题 以下操作最好在root用户下进行 xff0c root用户操作起来方便一些 xff0c 不会被权限困扰 换源 最好在做所
  • Redis删除key

    Redis 删除 key 的方式分为两种 xff0c 一种是单独删除指定的 key xff0c 另一种是根据通配符进行批量删除 1 删除指定的 key 1 登录 Redis 客户端 redis cli 注 xff1a 如果提示 Redis
  • Jlink下载stm32cube生成的程序会出现No Cortex-M SW Device Found错误,下载的第一次没事,第二次就会报错

    Jlink下载stm32cube生成的程序会出现No Cortex M SW Device Found错误 xff0c 下载的第一次正常 xff0c 第二次就会报错的问题 作为写stm32的神器stm32cubemx越来越多人开始使用 xf
  • Hadoop 典型Writable类详解

    Hadoop 典型Writable类详解 Hadoop将很多Writable类归入org apache hadoop io包中 xff0c 在这些类中 xff0c 比较重要的有Java基本类 Text Writable集合 ObjectWr
  • 判断js数据类型的方法

    基本类型 String xff0c Number xff0c Boolean xff0c Undefined xff0c Null xff0c Symbol 引用类型 Object 但是有些时候我们需要的是把数组啊 xff0c 函数啊 xf
  • javaScript 运行时环境

    js的执行阶段 网页的线程 JS引擎线程 xff1a 也称为JS内核 xff0c 负责解析执行Javascript脚本程序的主线程 xff08 例如V8引擎 xff09 事件触发线程 xff1a 归属于浏览器内核进程 xff0c 不受JS引
  • 如何用策略模式,优化你代码里的的if-else?

    最近有一个学妹在跟我沟通如何有效的去避免代码中一长串的if else判断或者switch条件判断 xff1f 针对更多的回答就是合理的去使用设计来规避这个问题 在设计模式中 xff0c 可以使用工厂模式或者策略模式来处理这类问题 xff0c
  • Vue组件生命周期执行顺序

    通过学习他人的博客学习到的知识点 xff0c 小白我 xff0c 顺便总结下 xff0c 引出问题 需求 xff1a 父组件刚更新完 xff0c 子组件要立马获取到父组件中传过来的值 created xff1a 在实例创建完成后被立即调用
  • 前端面试题---DOM测试36

    得分 这个题目7分我是得了4分 解析 第一问 var textarea 61 document querySelector 39 textarea 39 第二问 1 对象添加 textarea rows 61 5 2 元素添加 textar
  • 前端小测----CSS基础测试11

    得分 这个题目8分我得了5分 分析 关于HTML语义 xff1a article用在非常大段的完整的描述内容上 header是表示非常完整的整页的头部 xff0c 不是具体某一两个标题头 对于一个文字列表的标题 xff0c 级别h3 h6之
  • webpack对CSS使用alias相对路径

    问题来源 由于对页面的路由需要一些修改 xff0c 要对几乎全部的 vue文件添加一个父文件 xff0c 然后改路由 xff0c 但是问题来了 xff0c 没一个页面的文件 xff0c 资源路径都要改 xff0c import还好可以用al
  • Base64的学习

    来源 再一次看比如的代码的时候发现别人的图标是一串很长的字符串 xff0c 而不是路径引用 xff0c 从而开启了我对Base64的学习 解决 原生的atob和btoa方法进行Base64的编码 atob xff1a 解码 从a base6
  • localStorage和sessionStorage区别和使用

    一 什么是localStorage 在HTML5中 xff0c 新加入了一个localStorage特性 xff0c 这个特性主要是用来作为本地存储来使用的 xff0c 解决了cookie存储空间不足的问题 cookie中每条cookie的