js 對象 toJSON 方法


淺談 js 對象 toJSON 方法

 

前些天在《淺談 JSON.stringify 方法》說了他的正確使用姿勢,今天來說下 toJSON 方法吧。
其實我覺得這貨跟 toString 一個道理,他是給 stringify 方法字符串化的時候調用的。
看下 MDN 官方文檔吧《toJSON behavior》。
非常簡單,但是要注意的是他和 stringify 方法第二個參數稍微有點不同。
因為 stringify 第二個參數是回調函數時,只是對當前 key 對應的值進行修改。
而 toJSON 則是對當前對象進行修改。
例如:

var obj = {
    key: 'foo' }; var ret = JSON.stringify(obj, function (k, v) { return k === "key" ? v.toUpperCase() : v; }); console.log(ret); var obj = { key: 'foo', toJSON: function () { return 'bar'; } }; var ret = JSON.stringify(obj); console.log(ret);

區別非常明顯,toJSON 的返回值直接代替了當前對象,而 stringify 的回調函數則僅僅是修改了當前值。

  原理:
toJSON()作為JSON.stringify中第二個參數(函數過濾器)補充,理解內部順序很重要。
 假設把一個對象傳入JSON.stringify() 序列化對象的順序如下:
      (1)如果存在toJSON()方法而且能通過它取得有效的值,則調用該方法。否則,按默認順序執行序列化
      (2)如果提供了第二個參數,應用這個函數過濾器,傳入的函數過濾器的值是第(1)步返回的值。
      (3)對第(2)步 返回的每個值進行相應的序列化。
      (4)如果提供了第三個參數,執行相應的格式化操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM