JavaScript实验:对象序列化

与Java语言一样,JavaScript中可以对对象进行序列化和反序列化,藉此对对象进行保存。ECMAScript 5标准中,JavaScript中的对象序列化是通过JSON.stringify()来实现的,而反序列化则通过JSON.parse()来实现:

var o = {x:1, y:29, z:42};  
var s = JSON.stringify(o);  
console.log(s);//{"x":1,"y":29,"z":42}  
var c = JSON.parse(s);  
console.log(c);//Object {x=1, y=29, z=42}  

对于仅支持ECMAScript 3标准的浏览器,可以使用Douglas Crockford写的json2.js

在对对象进行序列化过程中,NaN、Infinity和-Infinity将被序列化成”null”;Date对象将被序列化成表示相应时间的字符串(但当使用JSON.parse()反序列化时,该时间字符串将作为普通字符串存在,不会被重新构建为Date对象)。

使用JSON.stringify()序列化对象时,所序列化的property仅限于对象自身(Own)的enumerable的property。而在JSON.stringify()运行时,JavaScript会先查找需要序列化的对象中是否有toJSON()方法,如果toJSON()方法存在,则调用该方法并将其返回的结果作为序列化的目标。如果toJSON()方法不存在,则使用默认的序列化方法。

本文实验代码: http://jsfiddle.net/cshao/K4x28/