2

JSON文字列を解析するときにreviver関数を提供できるコードオーバーロードをテストしたかったのです。

したがって、このコード:

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

収量10(ok)。

しかし、それから私は自分自身に、「これは何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 !!

とても奇妙な...

そこで、問題の原因となっているキー(ここには1つしかありませんが)を確認したいと思いました。

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

2つのアラートがありました:

  • 5

  • [object Object]

IMHOkvはとのためkeyでありvalue、実際、ここには1つのキーしかありません。

この他のアラートは何ですか?そして、なぜ私はチェックしなければならないのif (k === "")ですか?

4

1 に答える 1

3

答えはあなたが提供したリンクにあります...

リバイバーは、最終的に空の文字列と最上位の値を使用して呼び出され、最上位の値の変換を許可します。

vの場合はオブジェクト自体ですk === ""

于 2013-01-12T15:23:54.220 に答える