javascript - 关于JSON的一个问题
本文介绍了javascript - 关于JSON的一个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
下面是一个JSON转换成object的方法,为什么我把第二个return给注释了,得到的是undefine?我在if语句里不是已经返回了吗?如果说是if语句没有执行但是console.log的结果却是"小明同学",说明它已经执行了if语句啊
var a = JSON.parse('{"name":"小明","age":14}',function (key,value) {
if(key === "name"){
return value+"同学";
}
// alert(111);
// return value;
});
console.log(a);
解决方案
解决方法:
var a = JSON.parse('{"name":"小明","age":14}',function (key,value) {debugger
if(key === "name"){
return value+"同学";
}
else if(key === ""){return value}
else {return undefined;}
});
当遍历到最顶层的值(解析值)时,传入 reviver 函数的参数会是空字符串 ""(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值},在编写 reviver 函数时,要注意到这个特例。(译者按:这个函数的遍历顺序按深度优先遍历)
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v; // 如果到了最顶层,则直接返回属性值,
return v * 2; // 否则将属性值变为原来的 2 倍。
}); // { p: 10 }
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
// 最后一个属性名会是个空字符串。
return v; // 返回原始属性值,相当于没有传递 reviver 参数。
});
// 1
// 2
// 4
// 6
// 5
// 3
// ""
这篇关于javascript - 关于JSON的一个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文