var book = {
title: "Professional Javascript",
authors: [
"Nicholas C. zakas",
"Mike"
],
edition: 3,
year: 2011,
};
var jsonText = JSON.stringify(book, function(key , value){
switch(key){
case "authors":
return value.join("*");
case "year":
return book.year+1;
case "edition":
return 4;
default:
return value;
}
});
console.log(jsonText);
最后输出
{"title":"Professional Javascript","authors":"Nicholas C. zakas*Mike","edition":4,"year":2012}
这个我是没问题的,但是我把default那边的value随便改成一个数字之后,发现最后只返回那个值,就不返回json字符串了。
比如将
default:
return value;
改为
default:
return 222;
最后直接输出222
最后的defalut的意思应该是如果不匹配就返回那个222,为什么只会输出222呢。
一直以来感谢大家的帮助!!!!
你会发现,得到的结果是
而第一个key为空的那个value,是个object,打印出来,发现他正好就是book本身,由于你的filter函数直接return 222
会导致直接将book的值设置为222,导致switch全部失效。
得到的结果是
不难发现, json.stringfy的第二个类型为函数的参数,会把传进来的参数本身,构造成key: ' ', value: value 形式进行过滤,然后再过滤属性,递归下去。