// json字符串
var jsonStr = '{ "name":"Zhang", "age":3, "course": { "name": "HTML5" } }';
// json數(shù)據(jù)
{ "name":"Zhang", "age":3, "course": { "name": "HTML5" } }
// js對(duì)象字面量
var obj = { name: "Zhang", age:3, course: { name: "HTML5" } };
json 字符串就是一個(gè)字符串,String 類型,與其他兩者就是數(shù)據(jù)類型的差別,就像字符串 "1" 和數(shù)值 1 一樣。
json 是一種跨語言的約定俗稱的數(shù)據(jù)格式,與 js 對(duì)象的差別看起來只是屬性加了引號(hào)而已,使用時(shí)可以當(dāng)做 js 對(duì)象來使用,甚至類型測(cè)試和原型樹都與 Object 有扯不開的聯(lián)系。
var json = {"a" : 1};
console.log(typeof json) // object
console.log(json instanceof Object) // true
console.log([].toString.call(json)) // [object Object]
console.log(json.constructor) // function Object() { }
console.log(json.__proto__ == Object.prototype) // true
即使這樣,也不能說 json 就是 js 對(duì)象,確切的說 js 對(duì)象是 json 在 js 語言中的載體。 作為一種跨語言的數(shù)據(jù)格式,它不能像 js 對(duì)象一樣添加一個(gè)函數(shù)作為屬性,值不能為 NaN 或 undefined。所能傳遞的都是各種語言易解析的數(shù)據(jù)類型。
json 本身只是一種數(shù)據(jù)格式,要想在 js 中使用,就需要依賴語言提供解釋器。也就是說,是 js 的 json 解釋器把 json 數(shù)據(jù)轉(zhuǎn)換成了 js 中易使用的 object 類型。
上面已經(jīng)提到了, js 對(duì)象是 json 在 js 語言中的載體,所以在 js 對(duì)象沒有函數(shù)屬性與非法值的時(shí)候,無需計(jì)較它到底是什么。 以下是兩者相互轉(zhuǎn)換的方法:
// 字符串轉(zhuǎn) json
var json = JSON.parse('{ "a": 1}');
// 對(duì)象轉(zhuǎn)字符串
var jsonStr = JSON.stringify({ b: 2 });
以上是個(gè)人理解,至于你信不信……