关于ECMAScript中JSON.stringify的问题

时间:2012-04-12 14:39:51

标签: javascript json ecmascript-5 stringify

我在看MDN's "Using native JSON"。我有3个关于JSON.stringify方法的问题。

问题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

我认为我的代码应该在下面得到字符串,因为“如果你返回一个Number,那么当添加到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},我应该如何更改代码?

非常感谢!

1 个答案:

答案 0 :(得分:2)

  1. foo是一个对象({…})。对象不是字符串。你审查外部对象,所以它永远不会被递归。
  2. 因为您为2返回foo而不是递归到其中
  3. 测试它是字符串还是数字(而不是测试它是不是字符串)然后返回2