Вопросы о JSON.stringify в ECMAScript

Я смотрю MDN "Использование собственного 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

Я думаю, что мои коды должны получить строку ниже, потому что «Если вы возвращаете число, строка, соответствующая этому числу, используется в качестве значения свойства при добавлении в строку 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}, как мне изменить коды?

Большое спасибо!


person weilou    schedule 12.04.2012    source источник


Ответы (1)


  1. foo — это объект ({…}). Объекты не являются строками. Вы подвергаете цензуре внешний объект, чтобы он никогда не рекурсировался.
  2. Потому что вы возвращаете 2 вместо foo вместо того, чтобы возвращаться к нему
  3. Проверьте, является ли это строкой или числом (вместо проверки, если это не строка), затем верните 2
person Quentin    schedule 12.04.2012