【发布时间】:2011-09-05 19:40:35
【问题描述】:
SessionStorage 和 LocalStorage 允许在 Web 浏览器中保存键/值对。值必须是字符串,保存js对象不是小事。
var user = {'name':'John'};
sessionStorage.setItem('user', user);
var obj = sessionStorage.user; // obj='[object Object]' Not an object
现在,您可以通过将对象序列化为 JSON,然后对其进行反序列化以恢复对象来避免此限制。但是 Storage API 总是通过 setItem 和 getItem 方法。
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'
我尝试了defineGetter 和defineSetter 方法来拦截调用,但这是一项乏味的工作,因为我必须定义所有属性,而我的目标是不知道未来的属性。
【问题讨论】:
-
我自己也想过。我想很多人都有。但我不认为 getter 和 setter 方法是太大的负担。顺便提一句;您可以使用 JavaScript 进行序列化和解析,MS 最终支持与其他所有人相同的标准对象。对 JSON 和 jQuery 等软件包的需求正在迅速结束。
-
我想我没有看到限制。如果您只有微不足道的对象,那么使用 JSON.stringify 和 JSON.parse 似乎有点过头了,但如果您有足够大的数据对象,这两种方法会为您做很多工作。
-
"我可以避免这个限制吗?"好像是个问题
-
限制与否,这个问题帮我解决了一个问题,谢谢。
标签: javascript session-storage