SessionStorage和LocalStorage允许在Web浏览器中保存键/值对。该值必须是一个字符串,并且保存js对象不是微不足道的。在sessionStorage中保存Javascript对象
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方法不是一个太大的负担。 BTW;你可以使用JavaScript进行序列化和解析,并且MS最终支持与其他人一样的标准对象。像JSON和jQuery这样的软件包需求日益迅速到来。 – 2013-03-18 07:45:29
我想我没有看到这个限制。如果你只有微不足道的对象,那么使用JSON.stringify和JSON.parse看起来可能过于矫枉过正,但如果你有大小适中的数据对象,那么这两种方法正在为你做很多工作。 – Robusto 2013-08-05 15:26:01
“我能避免这种限制吗?”似乎是一个问题 – sonicblis 2014-06-19 21:17:46