zoukankan      html  css  js  c++  java
  • 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)如果提供了第三个参数,执行相应的格式化操作。
  • 相关阅读:
    background-size ie8及以下不兼容的解决方案
    前端
    JavaScript ES(6-11)
    前端工程化
    前端安全漏洞与防范
    Vue源码思维导图
    项目流程总结
    typescript版数据结构与算法库
    tsconfig.json各项配置注解
    Sql server动态加载存储过程--分页
  • 原文地址:https://www.cnblogs.com/keyi/p/11058558.html
Copyright © 2011-2022 走看看