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

时间:2014-01-27 12:43:37

标签: javascript json object

假设Javascript对象具有以下功能:

function Foo() {
    this.a = 32;
    this.bar = function (){
        alert("Hello World!");
    }
}

JSON.stringify()如何处理bar函数?它被忽略了吗?这是标准做法吗? JSON转换什么并且不转换为Json字符串?

Rem:我不知道为什么人们对我的问题进行了贬低,显然不应该用一个函数对一个对象进行字符串化。我只是想了解默认行为。

1 个答案:

答案 0 :(得分:2)

如果传递给数组,

JSON.stringify只会更改传递给null的函数,如果在对象中,则根本不包含该属性。它不会尝试复制函数,甚至不会以字符串形式复制。

例如,请看:

JSON.stringify([function () {}]); // "[null]"
JSON.stringify({ x: function () {} }); // "{}"

如果您尝试对函数本身进行字符串化,则它不是有效的JSON值,这意味着JSON.stringify无法生成有效的JSON字符串:

JSON.stringify(function () {}); // undefined

这被指定为ECMAScript规范的一部分,尽管它的实际措辞相当复杂。但是,包含的注释总结了这一点:

  

注5

     

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