假设Javascript对象具有以下功能:
function Foo() {
this.a = 32;
this.bar = function (){
alert("Hello World!");
}
}
JSON.stringify()
如何处理bar
函数?它被忽略了吗?这是标准做法吗? JSON转换什么并且不转换为Json字符串?
Rem:我不知道为什么人们对我的问题进行了贬低,显然不应该用一个函数对一个对象进行字符串化。我只是想了解默认行为。
答案 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
。在对象中,无法代表的值会导致 要从字符串化中排除的属性。