2

我想测试在解析 JSON 字符串时可以提供 reviver 函数的代码重载。

所以这段代码:

JSON.parse('{"p": 5}', function(k, v) { if (k === "") return v; return v * 2; }).p;

产量10(好的)。

但后来我问自己,“这是什么if (k === "")东西?” 让我们删除它!:

JSON.parse('{"p": 5}', function(k, v) { return v*2;}).p; //undefined !!

也许是因为 5 是一个整数?让我们尝试parseInt

JSON.parse('{"p": 5}', function(k, v) { return parseInt(v)*2;}).p; //undefined !!

很奇怪...

所以我想看看是哪些键(虽然这里只有一个)造成了麻烦:

JSON.parse('{"p": 5}', function(k, v) { alert(v)}).p;

有 2 个警报:

  • 5

  • [object Object]

恕我直言kandv用于keyand value,实际上这里只有一个键。

这个其他警报是什么为什么必须检查if (k === "")

4

1 回答 1

3

答案在您提供的链接中...

最终使用空字符串和最高值调用 reviver 以允许转换最高值。

v是对象本身的情况k === ""

于 2013-01-12T15:23:54.220 回答