淺談 js 對象 toJSON 方法
前些天在《淺談 JSON.stringify 方法》說了他的正確使用姿勢,今天來說下 toJSON 方法吧。
其實我覺得這貨跟 toString 一個道理,他是給 stringify 方法字符串化的時候調用的。
看下 MDN 官方文檔吧《toJSON behavior》。
非常簡單,但是要注意的是他和 stringify 方法第二個參數稍微有點不同。
因為 stringify 第二個參數是回調函數時,只是對當前 key 對應的值進行修改。
而 toJSON 則是對當前對象進行修改。
例如:
區別非常明顯,toJSON 的返回值直接代替了當前對象,而 stringify 的回調函數則僅僅是修改了當前值。
原理:
toJSON()作為JSON.stringify中第二個參數(函數過濾器)補充,理解內部順序很重要。
假設把一個對象傳入JSON.stringify() 序列化對象的順序如下:
(1)如果存在toJSON()方法而且能通過它取得有效的值,則調用該方法。否則,按默認順序執行序列化
(2)如果提供了第二個參數,應用這個函數過濾器,傳入的函數過濾器的值是第(1)步返回的值。
(3)對第(2)步 返回的每個值進行相應的序列化。
(4)如果提供了第三個參數,執行相應的格式化操作。