JSON.stringify()方法用於將一個值轉為JSON字符串,該字符串符合JSON格式,並且可以被JSON.parse()方法還原
一、使用JSON.stringify()方法返回的效果,以及需要注意的地方
例如:
!!!!!!原始類型的字符串,轉換之后會帶雙引號
注意:
看到這個表達式,第一反應應該是true,結果是false
分開打印看下效果就一目了然,這是因為內層的雙引號可以讓引擎知道,這是個字符串,
如果內層沒有雙引號,在還原時,Javascript引擎就無法知道是原始值是字符串還是布爾值
上面代碼中,字符串foo
,被轉成了"\"foo\""
二、注意
數組成員是undefined、函數或者XML對象,都會被轉成null
上面代碼中,對象obj的a屬性是undefined,b是一個函數,轉變之后都會被過濾掉
如果是正則對象,會被轉成空對象(文章最后有解決方法)
JSON.stringify()方法會忽略對象的不可遍歷屬性
所以,當你使用JSON.stringify()方法時遇到一些問題,綜合上面的情況,也許可以更快解決
三、JSON.stringify()方法第二個參數
1.可以接受一個數組作為第二個參數,指定參數對象的那些屬性需要轉成字符串(數組無效)
2.第二個參數還可以是一個函數,(函數不能是undefined,否則會被忽略)
四、第三個參數
JSON.stringify()
還可以接受第三個參數,用於增加返回的 JSON 字符串的可讀性。
默認返回的是單行字符串,對於大型的 JSON 對象,可讀性非常差。第三個參數使得每個屬性單獨占據一行,並且將每個屬性前面添加指定的前綴(不超過10個字符)。
如果第三個參數是數字,那就是每個屬性前面添加的空格
五、參數的toJSON()方法
如果參數對象有自定義的toJSON()
方法,那么JSON.stringify()
會使用這個方法的返回值作為參數,而忽略原對象的其他屬性。
Date對象就有一個自己的toJSON()方法
toJSON()
方法的一個應用是,將正則對象自動轉為字符串。因為JSON.stringify()
默認不能轉換正則對象,但是設置了toJSON()
方法以后,就可以轉換正則對象了。