關于 JSON.stringify,你不知道的六件事
對于 JSON.stringify 這個方法我相信大家都很熟悉了,一般用來將一個對象或者數組轉成字符串,也就是一個 JSON,然后讓接口攜帶并傳到后端。
但是你真的很了解 JSON.stringify 嗎?往下閱讀,看你是不是真的了解它~
第二個參數傳數組Array
JSON.stringify 的第二個參數傳數組時,那么它只會轉換數組中的 key,比如下面例子中,只會轉換 name 屬性:
第三個參數傳數字Number
JSON.stringify 的第三個參數傳數字時,這個數字會被當成 JSON 的縮進級別。
比如下面例子,分別是2空格、4空格、6空格縮進:
第三個參數傳字符串String
JSON.stringify 的第三個參數傳字符串時,這個字符串會被當成 JSON 的縮進占位符:
toJSON
如果被轉換的對象中有 toJSON 這個方法的話,那么當JSON.stringify進行轉換后,會獲取這個toJSON方法的執行返回值:
JSON.stringify 局限性
很多人使用 JSON.stringify 來做深拷貝,但是這是萬萬不行的,因為它是有局限性的:
從下面例子可以看出:
- undefined、function、symbol 在轉換后直接被忽略了
- 正則表達式轉換成對象,日期轉換成字符串
- NaN、Infinity 直接變成 null
所以千萬不要用 JSON.stringify 來做深拷貝!!!得不到滿意的結果的!!!
環引用報錯
對包含循環引用的對象(對象之間相互引用,形成無限循環)執行此方法,會拋出錯誤。
以前舊版的瀏覽器和Nodejs是會直接報錯的,但是貌似現在新版的不會報錯了: