在会话存储中保存 Javascript 对象

2022-08-30 01:51:52

SessionStorage 和 LocalStorage 允许在 Web 浏览器中保存键/值对。该值必须是字符串,并且保存js对象不是微不足道的。

var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object

如今,您可以通过将对象序列化为 JSON,然后反序列化它们以恢复对象来避免此限制。但存储 API 始终通过 和 方法。setItemgetItem

sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.getItem('user')); // An object :D

我可以避免此限制吗?

我只想执行类似这样的东西:

sessionStorage.user.name; // 'John'
sessionStorage.user.name = 'Mary';
sessionStorage.user.name // 'Mary'

我已经尝试了 和 方法来拦截调用,但这是一项繁琐的工作,因为我必须定义所有属性,而我的目标不是知道未来的属性。defineGetterdefineSetter


答案 1

解决方案是在 sessionStorage 上调用 setItem 之前将对象字符串化。

var user = {'name':'John'};
sessionStorage.setItem('user', JSON.stringify(user));
var obj = JSON.parse(sessionStorage.user);

答案 2

你能不能不“字符串化”你的对象...然后用于存储对象的字符串表示形式...然后当你需要它,然后用它来把它拿回来?sessionStorage.setItem()sessionStorage.getItem()$.parseJSON()

工作示例 http://jsfiddle.net/pKXMa/