sessionStorage与localStorage

本文详细介绍了Web存储中的sessionStorage和localStorage的区别,包括它们的存储方式、存取数据、删除与查找数据的方法。同时,文章指出在不同浏览器中两者的支持情况,并提醒在使用时要注意数据类型转换的问题,例如数值存储时需避免直接转化为字符串导致的计算错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web应用中的数据可以保存在两个地方,一个是web客户端(用户计算机),一个就是web服务器。

在h5之前,本地存储就只有cookie一种,但如今web存储分为两种,分别对应两个javascript对象。

1.sessionstorage与localStorage区别:

a.本地存储:对应localStorage对象,用来长期保存网站的数据,并且站内的页面都可以访问该数据,如果用户想要删除数据的话,浏览器一般会提供三种机制,当然,这要看何种浏览器了。

  • 多数浏览器都会提供一种清除机制,让用户可以清除本地数据空间的数据。
  • 有些浏览器会提供一些命令使得用户要么不删要么全都要删除,因为这些浏览器是将本地存储与cookie放在一起的,因此清除本地存储就必须清除cookie。
  • 还有一些浏览器会让用户按照站点检查数据,有选择性的去删除数据。

b.会话存储:对应sessionStorage对象,用于保存一个临时的页面数据,在用户关闭窗口或者标签之前数据是存在的,但是在关闭之后数据便会被浏览器自动的删除。

从页面代码来看,本地存储与会话存储的操作是完全相同的,他们的区别只是在存储数据的寿命的长短不同而已。

2.存取数据

要把一段信息保存在会话存储中,首先要为这个数据起个名字,这个名字就叫做键,用于唯一标志这条数据。

要保存数据就要使用setItem()方法。

例如,如果你想将文本框中的数据保存下来,就改这没写:

var nameInput = docunment.getElementById("username");
localStorage.setTlem("user_name",nameInput.value);

要读取本地存储的数据和保存数据是一样的简单,用到的方法是getItm()方法。

例如,如果你想将方才存进去的数据取出来,然后通过弹框显示出来。

if(localStorage.getItem("user_name")==null){//判断某个键的值是否为空;
    alert("你进去的数据为空!");
}
else{
    document.getElementById("username").value = localStorage.getItem("user_name");
}

会话存储也是一样的,唯一的区别便是一个是sessionStorage对象,一个是localStorage对象。

注意:没有web服务器是不能使用web存储的。

  • 在IE中完全不支持web存储,因为其localStorage与sessionStorage对象不见了,访问它的js代码时,便会报错。
  • 在Firefox中,localStorage与sessionStorage对象还在,但是任何关于数据的读写操作都是静静的失败。
  • 在Chrome中,多数的web存储功能都是能实现的,只有少数功能(如onStorage事件)会失效。

除此之外,web存储还有一个最为重要的细节,那就是通过localStorage与sessionStorage保存数据时,该数据会被自动的转化为文本字符串,对于原就是文本的当然不会有影响,但是对于数值的数据就会有影响。。

比如在游戏中想要保留游戏结束时的位置,即坐标值时,就会遇到问题,如果你保存的为文本“35”,之后又给“35”加了个“5”,最后的结果就变成了“355”而不是你想要的“35+5”,这个数值的改变,既有可能让你的游戏出现大的位置差错等。

解决的办法当然是有的:比如使用Number()函数就很好。
如:

x = Number(localStorage.getItem("mazegame_currentX"));
X+=5;//如此一来js就会正确的计算出35+5,返回40;

3.删除,查找所有数据项

  • 删除:
    删除数据项是很简单的,只需要调用removeItem()方法,再传入键名,就可以删除你不想要的数据项了: localStorage.removeItem(“user_name”);

    或者就使用更加厉害的clear()方法,将本地存储的会话数据全部清空:sessionStorage.removeItem(”user_name”);

  • 查找所有项:
    想要查找所有的数据项,大可以不必知道所有数据的键名,如此也可以查到,使用key()方法就可以,或者,如果你想知道这个页面都保存了那些数据,或者都是使用的什么键名的时候也可以用这个方法。

    例如:

function findAllItem(){
    var itemList = document.getElementById("itemList");
    //取得用于保存数据项的<ul>元素
    itemList.innerHTML = "";//清楚列表;
    for(var i=0;i<localstorage.length;i++){
    //遍历所有数据项
    var key = localStorage.key(i);//取得当前数据项的键;
    var item = localStorage.getItem(key);//取得以该键保存的数据值
    //用以上数据创建一个列表项
    //添加到页面中
    var newItem = document.createElement("li");
    newItem.innerHTML = key+";"+item;
    itemList.appendChild(newItem);
    }
}

4.其他方法

  • getFullYear():创建年份对象。
  • getMonth():创建月份对象。
  • getDate():创建天数对象。
  • JSON.stringify():可以把对象连同其数据转化为文本形式。
  • JSON.parse():则是把文本转化为对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值