localStorage属性
-
localStorage 和 sessionStorage 属性允许在浏览器中存储 key/value 对的数据。
-
localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。
-
localStorage 属性是只读的。
-
提示: 如果你只想将数据保存在当前会话中,可以使用 sessionStorage属性, 该数据对象临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
语法:
window.localStorage
保存数据语法:
localStorage.setItem("key", "value")
读取数据语法:
var lastName = localStorage.getItem("key")
删除数据语法:
localStorage.removeItem("key")
-
优势:
- localStorage 拓展了 cookie 的 4K 限制。
- localStorage 会可以将第一次请求的数据直接存储到本地,这个相当于一个 5M 大小的针对于前端页面的数据库,相比于 cookie 可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的。
-
局限:
- 浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
- 目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
- localStorage在浏览器的隐私模式下面是不可读取的。
- localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
- localStorage不能被爬虫抓取到。
-
localStorage与sessionStorage的唯一区别就是localStorage属于永久性存储,而sessionStorage属于当前会话结束的时候,sessionStorage中的键值对会被清空。
-
官方推荐的是 getItem\setItem 这两种方法对其进行存取。
localstorage 存储 json 格式的方法其实比较简单,比如有 json 数据如下:
var data = {
test:"text",
test1:"123456",
test2:"字段值",
}
存储方式为如下,将 json 转化为字符串再存入:
localStorage.setItem("data", JSON.stringify(data));
而使用方法则是如下:
var data = localStorage.getItem("data");
data = JSON.parse(data);
取出存储的字段,再重新转化为 json 形式。
以上对于 json 数据同样有效,所以对于一些接口请求的数据可以通过这种方式本地化。
sessionStorage属性
-
sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
-
提示: 如果你想在浏览器窗口关闭后还保留数据,可以使用 localStorage属性, 该数据对象没有过期时间,今天、下周、明年都能用,除非你手动去删除。
语法:
window.sessionStorage
保存数据语法:
sessionStorage.setItem("key", "value");
读取数据语法:
var lastname = sessionStorage.getItem("key");
删除指定键的数据语法:
sessionStorage.removeItem("key");
删除所有数据:
sessionStorage.clear()
Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
用法:Vuex
区别
-
vuex 存储在内存,localstorage(本地存储)则以文件的方式存储在本地,永久保存,sessionstorage( 会话存储 ) ,临时保存。localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
-
应用场景:vuex用于组件之间的传值,localstorage,sessionstorage则主要用于不同页面之间的传值。
-
永久性:当刷新页面(这里的刷新页面指的是 --> F5刷新,属于清除内存了)时vuex存储的值会丢失,sessionstorage页面关闭后就清除掉了,localstorage不会。
总结:
用localstorage可以代替vuex,对于不变的数据确实可以,但是当两个组件共用一个数据源(对象或数组)时,如果其中一个组件改变了该数据源,希望另一个组件响应该变化时,localstorage无法做到。
这俩完全就是俩个东西,vuex是vue的状态管理机制,是方便组件之间通信的。一个组件的数据变化是会映射到使用这个数据的其他的组件。而localstorage是本地存储,是将数据存到浏览器的方法,一般是在跨页面传递数据时使用。