关于JSON.stringify()

var students = {};

students.app = 'nmm'; 
students.aps = 'nms'; 
students.ape = 'jju'; 
var json = JSON.stringify(students,switchUpper); 
function switchUpper(key, value) { 
        if (typeof value=='string') {
             return value; 
        }
         
} 
    console.log(json)

菜鸟一枚求助!!当JSON.stringify()方法的第二个参数为函数时。函数里的两个参数是由谁传进来的,key是不是app,aps,ape?value是不是'nmm','nms','jju'?如果是,为什么函数里面达到条件了最后json返回的undefined??

阅读 2.1k
2 个回答
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。

根节点的key''空字符串 value是这个对象

{
    name:1,
    children:{
        name:2
    }
}

例如这样的对象switchUpper遍历的顺序
分别是
1 . key:'',value:{name:1,children:{name:2}}
2 .key:name,value:1
3 .key:children,value:{name:2}
4 .key:name,value:2
当有返回undefined他的子对象就被删除 例如1的时候返回undefined234就都不会执行
所以你第一次进入的时候valuestudents所以不是字符串返回undefined就没有然后了

我来回答

函数里的两个参数是由谁传进来的

先上一个回调函数的简单例子

function stringify(obj,fn){
    Object.keys(obj).forEach(key=>{
        fn(key,obj[key])
    })
}
var a = {foundation: "Mozilla", model: "box"}
var s = function(key,value) {console.log(key,value)}
stringify(a,s) //foundation Mozilla model box

回调函数内部大体都是类似这么实现的,可见回调函数fn的参数是由执行函数stringify传过去的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题