1

MDNの「ネイティブJSONの使用」を見ています。そして、私はそのJSON.stringify方法について3つの質問があります。

質問1:

var foo = {
    "foundation": "Mozilla",
    "model": "box",
    "week": 45,
    "transport": "car",
    "month": 7
},
    censor = function (key, value) {
        if (typeof value === 'string') {
            return;
        }
        return value;
    };
console.log(JSON.stringify(foo, censor)); // String: {"week":45,"month":7}

上記のコードは正常に機能します。しかし、なぜ以下のコードはうまく機能しないのですか?

var foo = {
    "foundation": "Mozilla",
    "model": "box",
    "week": 45,
    "transport": "car",
    "month": 7
},
    censor = function (key, value) {
        if (typeof value !== 'string') {
            return;
        }
        return value;
    };
console.log(JSON.stringify(foo, censor)); // undefined

質問2:

以下のコードを遵守してください。

var foo = {
    "foundation": "Mozilla",
    "model": "box",
    "week": 45,
    "transport": "car",
    "month": 7
},
    censor = function (key, value) {
        return 2;
    };
console.log(JSON.stringify(foo, censor)); // String: 2

「数値を返すと、その数値に対応する文字列がJSON文字列に追加されたときにプロパティの値として使用される」ため、コードは以下の文字列を取得する必要があると思います。( https://developer.mozilla.org/En/Using_native_JSONから引用)。

{"foundation":2,"model":2,"week":2,"transport":2,"month":2}

しかし、私は文字列を取得します2。なんで?

質問3:

取得したい場合{"foundation":2,"model":2,"week":2,"transport":2,"month":2}、どのようにコードを変更する必要がありますか?

どうもありがとうございます!

4

1 に答える 1

2
  1. fooオブジェクト({…})です。オブジェクトは文字列ではありません。外側のオブジェクトを打ち切ります。そのため、オブジェクトが繰り返されることはありません。
  2. あなたがそれに戻る代わりに戻ってくる2のでfoo
  3. 文字列か数値かをテストし(文字列でないかどうかをテストするのではなく)、2を返します
于 2012-04-12T14:53:58.090 に答える