Stringify并不能解决所有问题

似乎这里的答案并未涵盖JavaScript中可能的所有类型,因此这里有一些关于如何正确处理它们的简短示例://Objects and Arrays:

var obj = {key: "value"};

localStorage.object = JSON.stringify(obj);  //Will ignore private members

obj = JSON.parse(localStorage.object);//Boolean:

var bool = false;

localStorage.bool = bool;

bool = (localStorage.bool === "true");//Numbers:

var num = 42;

localStorage.num = num;

num = +localStorage.num;    //short for "num = parseFloat(localStorage.num);"//Dates:

var date = Date.now();

localStorage.date = date;

date = new Date(parseInt(localStorage.date));//Regular expressions:

var regex = /^No\.[\d]*$/i;     //usage example: "No.42".match(regex);

localStorage.regex = regex;

var components = localStorage.regex.match("^/(.*)/([a-z]*)$");

regex = new RegExp(components[1], components[2]);//Functions (not recommended):

function func(){}

localStorage.func = func;

eval( localStorage.func );      //recreates the function with the name "func"

我不建议存储函数,因为eval()邪恶会导致安全性,优化和调试问题。一般来说,eval()永远不应该在JavaScript代码中使用。

私人会员

使用JSON.stringify()存储对象的问题是,此函数无法序列化私有成员。可以通过覆盖.toString()方法(在Web存储中存储数据时隐式调用)来解决此问题://Object with private and public members:

function MyClass(privateContent, publicContent){

var privateMember = privateContent || "defaultPrivateValue";

this.publicMember = publicContent  || "defaultPublicValue";

this.toString = function(){

return '{"private": "' + privateMember + '", "public": "' + this.publicMember + '"}';

};

}

MyClass.fromString = function(serialisedString){

var properties = JSON.parse(serialisedString || "{}");

return new MyClass( properties.private, properties.public );

};//Storing:

var obj = new MyClass("invisible", "visible");

localStorage.object = obj;//Loading:

obj = MyClass.fromString(localStorage.object);

循环参考

另一个问题stringify是无法处理循环引用:var obj = {};obj["circular"] = obj;localStorage.object = JSON.stringify(obj);  //Fails

在此示例中,JSON.stringify()将抛出TypeError “将循环结构转换为JSON”。如果应支持存储循环引用,则JSON.stringify()可以使用第二个参数:var obj = {id: 1, sub: {}};obj.sub["circular"] = obj;localStorage.object = JSON.stringify( obj, function( key, value) {

if( key == 'circular') {

return "$ref"+value.id+"$";

} else {

return value;

}});

但是,找到一个有效的存储循环引用的解决方案很大程度上取决于需要解决的任务,恢复这些数据也不是一件容易的事。

html 属性存储对象,在HTML5 localStorage中存储对象相关推荐

  1. 在HTML5 localStorage中存储对象

    我想将JavaScript对象存储在HTML5 localStorage ,但是我的对象显然正在转换为字符串. 我可以使用localStorage存储和检索原始JavaScript类型和数组,但是对象 ...

  2. word2013插入excel对象报错_excel插入对象文件夹 Excel2013中插入对象文件的方法

    excel插入对象文件夹 Excel2013中插入对象文件的方法,最近到了季度汇报的时候,掌握一手excel技能在此刻显得多么重要,为了是你的excel看起来更高大上,今天教大家设置excel插入对象 ...

  3. HTML5 LocalStorage 本地存储

    说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示: 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个co ...

  4. HTML5 LocalStorage 本地存储原理详解

    说到Web开发中的本地存储,大家最先想到的应该就是Cookies这玩意了,最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太 ...

  5. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

  6. mongodb存储数据_在MongoDB中存储分层数据

    mongodb存储数据 继续使用MongoDB进行 NoSQL之旅,我想谈一谈一个经常出现的特定用例:存储分层文档关系. MongoDB是很棒的文档数据存储,但是如果文档具有父子关系,该怎么办? 我们 ...

  7. java中对象字节数_JAVA中求解对象所占字节大小

    该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...

  8. php 时间段 mysql 存储_php – 在MySQL解决方案中存储日期范围

    我正在编写脚本,要求管理员能够在他想要停车场时插入日期,管理员在一个范围内插入日期. 我很难找到在MySQL中存储日期的最佳方法的解决方案. 我应该使用两列AVAILABLE_FROM_DATE和AV ...

  9. 实数在计算机上存储,实数如何在内存中存储

    转自:http://my.oschina.net/ocare/blog/384339 (1) 二进制转换成十进制小数 1 2 3 4 5ex: (101.1011)2=1*2^2+0*2^1+1*2^ ...

最新文章

  1. 7-8 Windows消息队列 (25 分)
  2. 纸飞机html,Flyaway.css-炫酷纯CSS3纸飞机动画特效
  3. 机器学习算法源码全解析(四)-人工神经网络关键核心知识点汇总
  4. easyre-153 testre寒假逆向生涯(13/100)
  5. like mysql 相反_Mysql数据库的常用操作
  6. 代理模式给我们带来的便利
  7. 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...
  8. 如何修复GitKraken Inotify Limit Error\idea erro - 升级Ubuntu / Linux inotify限制
  9. 知识就是力量!(内含赠书福利)
  10. BCD码干什么用的?
  11. pca主成份分析方法
  12. Memcached总结四:用ava程序连接memcached进行操作
  13. (转)如何入门 Python 爬虫
  14. 情人节程序员用HTML网页表白【浪漫爱心旋转】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  15. SQL-(增)-插入操作
  16. 树莓派4B + darknet-yolov4-tiny + 英特尔第二代神经计算棒
  17. 无线测温系统在高低压开关柜内的运行---安科瑞 顾城
  18. 2017年北京邮电大学计算机考研机试试题及答案
  19. 浙江大学计算机学院钱沄涛实验室,浙江大学导师介绍--钱沄涛
  20. 夸计算机老师的成语,四字夸奖老师的成语

热门文章

  1. 5月27 权限设置及功能
  2. 使用jprobe建设镜面层叠的原则和见解
  3. Hadoop管理员的十个最佳实践(转)
  4. 实验:添加AXI IP到设计
  5. 动态向客户端注册脚本文件
  6. 用JavaScript怎么写Windows的状态栏
  7. Git(6)-- 记录每次更新到仓库图文版(git clone、status、add、diff、commit、rm、mv命令详解)
  8. Win10彻底关闭Antimalware Service Executable占用内存过高问题
  9. 解决: Android.bp ninja: error: unknown target MODULES-IN-xxx报错
  10. Win10启用linux子系统(Linuxer福利)