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