func=function() {foo=true}
alert(JSON.stringify(func));
警告“未定义”
obj={foo: true}
alert (JSON.stringify(obj));
提醒:“{foo:true}”
这是为什么?据我所知JSON.stringify()
将一个对象转换为一个json字符串,但我注意到这个函数对于一个“函数对象”。
“函数构造函数创建一个新的Function对象。在JavaScript中,每个函数实际上都是一个Function对象。”https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
“好的谷歌:所以每个javascript函数都是一个对象,每个对象都是一个函数......”它是一样的,但它的行为不同?我不懂。所以我转向stackoverflow。任何人都可以启发我并解释为什么JSON.stringify(function() {foo=true})
不起作用?
(ps。我的目标是将function() {foo=true}
转换为"function() {foo=true}"
我不是在寻找解决方法。我想知道为什么要将函数对象转换为(json)字符串。< / p>
答案 0 :(得分:3)
您可以使用Function.prototype.toString()
var a = function() { return 1; };
console.log( a.toString() ); // "function() { return 1; }"
我不确定支持。
答案 1 :(得分:1)
原因:JSON - &gt; JavaScript对象表示法。 JSON是一种机制,用于在String中持久化(序列化)JavaScript对象的状态,以便以后可以重用/以其他方式发送到服务器/进程。
功能不是对象 - &gt;所以它的状态不能被序列化。
但是,如果返回值是非函数值,则可以序列化函数的返回值。