🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 值 把对象视为值的组合时,可以使对象序列化成一个字符串,这个字符串包含着对象的结构。 而反序列化就是,让一个包含着对象结构的字符串作为依据,构造出一个新的对象。 在ES中可以用JSON.stringify和JSON.parse进行序列化和反序列化。 ~~~ var foo = {}; foo.bool = true; foo.str = 'ES'; foo.num = 2017; var fooStr = JSON.stringify(foo); console.dir(fooStr);//{"bool":true,"str":"ES","num":2017} var newObj = JSON.parse(fooStr); console.dir(newObj.bool);//true console.dir(newObj.str);//"ES" console.dir(newObj.num);//2017 console.dir(foo == newObj);//false ~~~ # 引用 引用值也是值,在对象序列化时,遇到引用值,会将引用的对象包含在里面进行序列化。 所以序列化和反序列化可以应用于嵌套的对象结构。 ~~~ var objA = {}; objA.num = 0; var objB = {}; objB.foo = objA; console.dir(JSON.stringify(objB));//{"foo":{"num":0}} ~~~ # 对象的结构 对象有两种基础结构,字典和数组。 他们序列化的内容也存在差异。 ~~~ var obj = new Object();//var obj = {}; obj["key"] = "value"; var arr = new Array();//var arr = []; arr.push("v0"); arr.push("v1"); arr.push("v2"); console.dir(JSON.stringify(obj));//{"key":"vaule"} console.dir(JSON.stringify(arr));//["v0","v1","v2"] ~~~ 简单来说,字典是以任意值做索引的集合,数组是以数字做索引的集合,他们有着不一样的用途和实现。