将函数对象转换为字符串| “功能(){...}”

时间:2014-03-05 11:06:19

标签: javascript json object

func=function() {foo=true}
alert(JSON.stringify(func));

警告“未定义”

obj={foo: true}
alert (JSON.stringify(obj));

提醒:“{foo:true}”

这是为什么?据我所知JSON.stringify()将一个对象转换为一个json字符串,但我注意到这个函数对于一个“函数对象”。

Btw搜索“功能对象”在搜索引擎领域是地狱,因为我从谷歌中获得的唯一结果是关于对象的功能和功能是如何对象,而不是实际的功能对象。

“函数构造函数创建一个新的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>

2 个答案:

答案 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;所以它的状态不能被序列化。

但是,如果返回值是非函数值,则可以序列化函数的返回值。