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呢。
一直以来感谢大家的帮助!!!!
var book = {
title: "Professional Javascript",
authors: [
"Nicholas C. zakas",
"Mike"
],
edition: 3,
year: 2011,
};
var jsonText = JSON.stringify(book, function(key , value){
console.log(key+ ' :' + value)
return value
});
console.log(jsonText);
你会发现,得到的结果是
:[object Object]
title :Professional Javascript
authors :Nicholas C. zakas,Mike
0 :Nicholas C. zakas
1 :Mike
edition :3
year :2011
{"title":"Professional Javascript","authors":["Nicholas C. zakas","Mike"],"edition":3,"year":2011}
而第一个key为空的那个value,是个object,打印出来,发现他正好就是book本身,由于你的filter函数直接return 222
会导致直接将book的值设置为222,导致switch全部失效。
var book = {
title: "Professional Javascript",
authors: [
"Nicholas C. zakas",
"Mike"
],
edition: 3,
year: 2011,
};
var jsonText = JSON.stringify(book, function(key , value){
if(key=' ')
console.log(value)
return value
});
console.log(jsonText);
得到的结果是
{ title: 'Professional Javascript',
authors: [ 'Nicholas C. zakas', 'Mike' ],
edition: 3,
year: 2011 }
Professional Javascript
[ 'Nicholas C. zakas', 'Mike' ]
Nicholas C. zakas
Mike
3
2011
{"title":"Professional Javascript","authors":["Nicholas C. zakas","Mike"],"edition":3,"year":2011}
不难发现, json.stringfy的第二个类型为函数的参数,会把传进来的参数本身,构造成key: ' ', value: value 形式进行过滤,然后再过滤属性,递归下去。