# 值
把對(duì)象視為值的組合時(shí),可以使對(duì)象序列化成一個(gè)字符串,這個(gè)字符串包含著對(duì)象的結(jié)構(gòu)。
而反序列化就是,讓一個(gè)包含著對(duì)象結(jié)構(gòu)的字符串作為依據(jù),構(gòu)造出一個(gè)新的對(duì)象。
在ES中可以用JSON.stringify和JSON.parse進(jìn)行序列化和反序列化。
~~~
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
~~~
# 引用
引用值也是值,在對(duì)象序列化時(shí),遇到引用值,會(huì)將引用的對(duì)象包含在里面進(jìn)行序列化。
所以序列化和反序列化可以應(yīng)用于嵌套的對(duì)象結(jié)構(gòu)。
~~~
var objA = {};
objA.num = 0;
var objB = {};
objB.foo = objA;
console.dir(JSON.stringify(objB));//{"foo":{"num":0}}
~~~
# 對(duì)象的結(jié)構(gòu)
對(duì)象有兩種基礎(chǔ)結(jié)構(gòu),字典和數(shù)組。
他們序列化的內(nèi)容也存在差異。
~~~
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"]
~~~
簡(jiǎn)單來(lái)說(shuō),字典是以任意值做索引的集合,數(shù)組是以數(shù)字做索引的集合,他們有著不一樣的用途和實(shí)現(xiàn)。
