sessionStorage 对象只存储会话数据,这意味着数据只会存储到浏览器关闭。这跟浏览器关闭时
会消失的会话cookie 类似。存储在sessionStorage 中的数据不受页面刷新影响,可以在浏览器崩溃
并重启后恢复。(取决于浏览器,Firefox 和WebKit 支持,IE 不支持。)
因为sessionStorage 对象与服务器会话紧密相关,所以在运行本地文件时不能使用。存储在
sessionStorage 对象中的数据只能由最初存储数据的页面使用,在多页应用程序中的用处有限。
因为sessionStorage 对象是Storage 的实例,所以可以通过使用setItem()方法或直接给属
性赋值给它添加数据。下面是使用这两种方式的例子:
// 使用方法存储数据
sessionStorage.setItem(“name”, “Nicholas”);
// 使用属性存储数据
sessionStorage.book = “Professional JavaScript”;
所有现代浏览器在实现存储写入时都使用了同步阻塞方式,因此数据会被立即提交到存储。具体
API 的实现可能不会立即把数据写入磁盘(而是使用某种不同的物理存储),但这个区别在JavaScript 层
面是不可见的。通过Web Storage 写入的任何数据都可以立即被读取。
老版IE 以异步方式实现了数据写入,因此给数据赋值的时间和数据写入磁盘的时间可能存在延迟。
对于少量数据,这里的差别可以忽略不计,但对于大量数据,就可以注意到IE 中JavaScript 恢复执行的
速度比其他浏览器更快。这是因为实际写入磁盘的进程被转移了。在IE8 中可以在数据赋值前调用
begin()、之后调用commit()来强制将数据写入磁盘。比如:
// 仅适用于IE8
sessionStorage.begin();
sessionStorage.name = “Nicholas”;
sessionStorage.book = “Professional JavaScript”;
sessionStorage.commit();
以上代码确保了"name"和"book"在commit()调用之后会立即写入磁盘。调用begin()是为了保
证在代码执行期间不会有写入磁盘的操作。对于少量数据,这个过程不是必要的,但对于较大的数据量,
如文档,则可以考虑使用这种事务性方法。
对存在于sessionStorage 上的数据,可以使用getItem()或直接访问属性名来取得。下面是使
用这两种方式的例子:
// 使用方法取得数据
let name = sessionStorage.getItem(“name”);
// 使用属性取得数据
let book = sessionStorage.book;
可以结合sessionStorage 的length 属性和key()方法遍历所有的值:
for (let i = 0, len = sessionStorage.length; i < len; i++){
let key = sessionStorage.key(i);
let value = sessionStorage.getItem(key);
alert(${key}=
KaTeX parse error: Expected 'EOF', got '}' at position 12: {value}`); }̲ 这里通过key()先取得给定…{key}=${value}`);
}
每次循环,key 都会被赋予sessionStorage 中的一个名称;这里不会返回内置方法或length
属性。
要从sessionStorage 中删除数据,可以使用delete 操作符直接删除对象属性,也可以使用
removeItem()方法。下面是使用这两种方式的例子:
// 使用delete 删除值
delete sessionStorage.name;
// 使用方法删除值
sessionStorage.removeItem(“book”);
sessionStorage 对象应该主要用于存储只在会话期间有效的小块数据。如果需要跨会话持久存储
数据,可以使用globalStorage 或localStorage。
javascript基础学习系列八百二十六:sessionStorage 对象
最新推荐文章于 2024-10-06 12:33:51 发布