Javascript JSON.stringify()对对象中的函数有什么作用?

Javascript JSON.stringify()对对象中的函数有什么作用?,javascript,json,object,Javascript,Json,Object,假设Javascript对象有一个函数: function Foo() { this.a = 32; this.bar = function (){ alert("Hello World!"); } } JSON.stringify()如何处理bar函数?它只是被忽略了吗?这是标准做法吗?JSON转换和不转换为JSON字符串的是什么 Rem:我不知道为什么人们对我的问题投了反对票,很明显,人们不应该用函数字符串化对象。我只是想了解默认行为。如果传递到数组

假设Javascript对象有一个函数:

function Foo() {
    this.a = 32;
    this.bar = function (){
        alert("Hello World!");
    }
}
JSON.stringify()
如何处理
bar
函数?它只是被忽略了吗?这是标准做法吗?JSON转换和不转换为JSON字符串的是什么

Rem:我不知道为什么人们对我的问题投了反对票,很明显,人们不应该用函数字符串化对象。我只是想了解默认行为。

如果传递到数组中,只需更改传递到
null的函数,如果在对象中,则根本不包含属性。它不尝试复制函数,即使是字符串形式

例如,请参见以下内容:

JSON.stringify([function () {}]); // "[null]"
JSON.stringify({ x: function () {} }); // "{}"
如果试图对函数本身进行字符串化,则该函数不是有效的JSON值,这意味着
JSON.stringify
无法生成有效的JSON字符串:

JSON.stringify(function () {}); // undefined
这是ECMAScript规范的一部分,尽管它的实际措辞相当复杂。但是,其中包含一个注释,总结了以下内容:

附注5

没有JSON表示的值(例如 未定义的和函数)不会生成字符串。相反,它们生成未定义的值。在数组中,这些值表示为 字符串
null
。在对象中,不可表示的值会导致 要从字符串化中排除的属性


JSON是一个ECMA标准-它对哪些数据类型的作用应该被很好地指定。它为函数返回
未定义的
。@MaxArt:JSON没有
未定义的
@MaxArt:console.log(JSON.stringify(function(){}));->未定义的
JSON.stringify([function(){}]);->[null]
,但是,您可以通过提供自定义替换函数来字符串化函数。是的,对不起,我写评论时很匆忙:)