为什么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/
答案 0 :(得分:17)
因为JSON无法存储功能。根据规范,值必须是以下之一:
Valid JSON values http://json.org/value.gif
作为旁注,此代码将使JSON.stringify
注意到函数:
Function.prototype.toJSON = function() { return "Unstorable function" }
答案 1 :(得分:3)
这是使用.prototype的另一种方法。您可以添加一个函数来stringify
JSON.stringify(obj, function(k, v) {
if (typeof v === 'function') {
return v + '';
}
return v;
});
答案 2 :(得分:2)
它不应该对方法(或任何函数)进行字符串化 - 特别是因为大多数内置对象的方法(以及任何用户定义对象的原型)都是本机代码。
如果确实需要它来打印你的方法,你可以覆盖你的对象的.toString方法,但是当你在字符串化的输出上调用JSON.parse时,它会处理方法好像它只是一个字符串,并且能够将其称为函数,您必须eval
- 这种做法通常不推荐。