2012-04-12 15 views
1

Ich beobachte MDN's "Using native JSON". Und ich habe 3 Fragen über die JSON.stringify Methode.Fragen über JSON.stringify in ECMAScript

Frage 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} 

Codes über gut funktionieren. Aber warum können die folgenden Codes nicht funktionieren?

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 

Frage 2:

Bitte beachten Codes unter:

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 

Ich glaube, meine Codes sollten Zeichenfolge unten bekommen, weil „Wenn Sie eine Zahl zurückgeben, die Zeichenfolge zu dieser Zahl entspricht wird als Wert für die Eigenschaft verwendet, wenn sie der JSON-Zeichenfolge hinzugefügt wird. " (zitiert aus https://developer.mozilla.org/En/Using_native_JSON).

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

Aber ich bekomme nur eine Zeichenfolge 2. Warum?

Frage 3:

Wenn ich will {"foundation":2,"model":2,"week":2,"transport":2,"month":2} bekommen, wie soll ich die Codes ändern?

Vielen Dank!

Antwort

2
  1. foo ist ein Objekt ({…}). Objekte sind keine Zeichenfolgen. Sie zensieren das äußere Objekt, so dass es nie in das Objekt zurückkehrt.
  2. Weil du zurückkehren 2 für foo statt Rekursion hinein
  3. Testen Sie, ob es sich um eine Zeichenfolge oder eine Zahl ist (statt der Prüfung, wenn es kein String) dann wieder 2