对象序列化(serialization): 将对象的状态转化为字符串. 也可以将字符串还原为对象.
es5 , 提供了内置函数JSON.stringify() , 和JSON.parse() ,用来序列化和还原JavaScript对象.
JSON的全称是"JavaScript Object Notation" —JavaScript对象表示法.
var user = {name:"博主" , pwd:"123456"};
var s= JSON.stringify(user);
p = JSON.parse(s) ; //p是s的深度clone
JSON 的语法是javaScript的子集, 不能表示JavaScript里的所有值.
支持对象,数组,字符串,无穷大数字,true,false和null , 并且它们可以序列化和还原.
NaN , Infinity, -Infinity序列化的结果是null,
日期对象序列化的结果是ISO格式的日期字符串, JSON.parse(Date对象) 为字符串;
函数 , RegExp , Error对象和undefined值不能序列化 ,在序列化的输出字符串会将这个属性省略掉.
JSON.stringify()和JSON.parse() 都可以接受第二个可选参数,通过传入需要序列化或还原的属性列表来定制
自定义的序列化或还原操作.
一个栗子:
var person ={name:"黄科坚" , sex:"男" , love: function(){alert("love编程")}, date: new Date(),undefined:undefined , };
var s =JSON.stringify(person); //将对象序列化
console.log(typeof s) //'string'
var decodeperson=JSON.parse(s); //将JSON 还原成对象
console.log(decodeperson.love) //undefined;
console.log(typeof decodeperson.date); //'string';
console.log(decodeperson.hasOwnProperty("undefined")); //false