簡體   English   中英

為什么 JSON.stringify 不顯示作為函數的 object 屬性?

[英]Why doesn't JSON.stringify display object properties that are functions?

為什么 JSON.stringify() 不顯示 prop2?

var newObj = {
  prop1: true,
  prop2: function(){
    return "hello";
  },
  prop3: false
};

alert( JSON.stringify( newObj ) ); // prop2 appears to be missing

alert( newObj.prop2() ); // prop2 returns "hello"

for (var member in newObj) {
    alert( member + "=" + newObj[member] ); // shows prop1, prop2, prop3
}

JSFIDDLE: http://jsfiddle.net/egret230/efGgT/

因為JSON無法存儲函數。 根據規范,值必須是以下之一:

有效的JSON值
(來源: json.org


作為旁注,此代碼將使JSON.stringify注意到這些函數:

Function.prototype.toJSON = function() { return "Unstorable function" }

這是使用.prototype的另一種方法。 您可以添加一個函數來stringify

JSON.stringify(obj, function(k, v) {
  if (typeof v === 'function') {
    return v + '';
  }
  return v;
});

它不應該對方法(或任何函數)進行字符串化 - 特別是因為大多數內置對象的方法(以及任何用戶定義對象的原型)都是本機代碼。

如果你真的需要它來打印你的方法,你可以覆蓋你的對象的.toString方法,但是當你在字符串化的輸出上調用JSON.parse時,它會把方法視為只是一個字符串,並且能夠把它稱為一個你必須eval它的功能 - 這種做法通常不推薦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM