2012-04-12 30 views
1

我正在看MDN's "Using native JSON"。我有3個關於JSON.stringify方法的問題。關於ECMAScript中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},我應該怎麼更改密碼?

非常感謝!

回答

2
  1. foo是一個對象({…})。對象不是字符串。你審查外部對象,所以它永遠不會被遞歸。
  2. 因爲您返回2foo,而不是遞歸到它
  3. 測試,如果它是一個字符串或數字(而不是測試,如果它不是一個字符串),然後返回2