【发布时间】:2017-03-05 14:08:18
【问题描述】:
JSBin 链接,方便你快速运行代码。
问题出在 cmets 中,但是从文档中关于 reviver(这个名字很糟糕)如何工作的说明来看,如果您不返回值或返回 undefined,那么应该从物体。如果您返回未转换的值,它保持不变。
然而,当我测试它时,看起来整个对象都被移除了。第一个例子工作得很好,偶数转换为负数,奇数不变。
但在第二个示例中,我什至没有返回对象,只是未定义。那么我是误读了文档还是有其他问题?
结果在第二个例子中只是未定义。
var obj = {
one: 1,
innerObj: {
two: 2,
four: 4
},
two: 2,
three: 3,
four: 4
},
b = {},
json = JSON.stringify(obj);
/**
* This works as expected.
*/
b = JSON.parse(json, function (name, value) {
if (value % 2 === 0) {
return -value;
}
return value;
});
console.log(b);
/**
[object Object] {
four: -4,
innerObj: [object Object] {
four: -4,
two: -2
},
one: 1,
three: 3,
two: -2
}
*/
obj = {
one: 1,
innerObj: {
two: 2,
four: 4
},
two: 2,
three: 3,
four: 4
};
b = {};
json = JSON.stringify(obj);
/**
* This does not work as expected, instead of deleting the property on the object, the entire object returns undefined.
*/
b = JSON.parse(json, function (name, value) {
if (value % 2 === 0) {
return -value;
}
});
console.log(b);
// undefined
【问题讨论】:
标签: javascript json reviver-function