1.JSON是JavaScript中讀寫**結構化數(shù)據(jù)**的更好的方式,因為可以把JSON直接傳給eval(),而且不必創(chuàng)建DOM對象。
2.JSON語法可以表示以下三種類型的值:
(1)簡單值:使用與JavaScript相同的語法,可以在JSON中表示字符串、數(shù)值、布爾值和null。但JSON不支持JavaScript中的特殊值undefined。
(2)對象:對象作為一種復雜數(shù)據(jù)類型,表示的是一組無序的鍵值對。而每個鍵值對中的值可以是簡單值,也可以是復雜數(shù)據(jù)類型的值。
(3)數(shù)組:數(shù)組也是一種復雜數(shù)據(jù)類型,表示一組有序的值的列表,可以通過數(shù)值索引來訪問其中的值。
JSON不支持變量、函數(shù)或對象實例,它就是一種表示結構化數(shù)據(jù)的格式,雖然與JavaScript中表示數(shù)據(jù)的某些語法相同,但它并不局限于JavaScript范疇。
3.JavaScript字符串與JSON字符串的最大區(qū)別在于,**JSON字符串必須使用雙引號(單引號會導致語法錯誤)**。
4.在實際應用中,JSON更多地用來表示更復雜的數(shù)據(jù)結構,而簡單值只是整個數(shù)據(jù)結構中的一部分。
5.**JSON中的對象要求給屬性加引號**。與JavaScript的對象字面量相比,JSON的對象有兩個不一樣的地方。首先,沒有聲明變量。其次,沒有末尾的分號。
6.**JSON數(shù)組也沒有變量和分號**。
7.ES5中定義的全局對象JSON有兩個方法:stringify()和parse()。在最簡單的情況下,這兩個方法分別用于把JavaScript對象序列化為JSON字符串和把JSON字符串解析為原生JavaScript值。**序列化即為轉換成字符串!**
8.在序列化JavaScript對象時,所有函數(shù)及原型成員都會被有意忽略,不體現(xiàn)在結果中。此外,值為undefined的任何屬性也都會被跳過。**結果中最終都是值為有效JSON數(shù)據(jù)類型的實例屬性**。
9.JSON.stringify()除了接收要序列化的JavaScript對象之外,還可以接收另外兩個參數(shù),一個是過濾器(可以是一個數(shù)組或函數(shù)),一個是表示是否在JSON字符串中保留縮進的選項。
10.可以給對象定義toJSON()方法。當把一個對象傳入JSON.stringify()時,如果存在toJSON方法而且能通過它取得有效的值,則會首先調(diào)用這個方法。
11.JSON.parse()方法也可以接收另一個參數(shù),該參數(shù)是一個函數(shù),將在每個鍵值對上調(diào)用。該函數(shù)接受兩個參數(shù),一個鍵和一個值,額日切都需要返回一個值。如果函數(shù)返回undefined,則表示要從結果中刪除相應的鍵;如果返回其他值,則將該值插入到結果中。在將日期字符串轉換為Date對象時,經(jīng)常要用到還原函數(shù)。
