所有javascript变量都是JSON可序列化的吗?

时间:2013-06-12 17:38:51

标签: javascript json

JSON.stringify可以将任何javascript变量转换为文本吗? 或者有限制(功能,原型等)?

4 个答案:

答案 0 :(得分:5)

JSON.stringify(JSON.stringify)

返回undefined; JSON不支持函数。

JSON.stringify(/JSON.stringify/)

这会返回"{}"; JSON.stringify跳过不可枚举的属性。

JSON.stringify(JSON)

这会返回"{}"; JSON.stringify跳过返回不支持的值的属性。

JSON.stringify(JSON.JSON = JSON)

这会引发异常; JSON不支持循环引用。

答案 1 :(得分:2)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

  

如果在转换过程中遇到未定义,函数或XML值,则将其省略(在对象中找到它)或删除为null(在数组中找到它时)。

答案 2 :(得分:2)

您的问题有两个答案:

  • 简单回答:不,请参阅各种反例(如DOM对象,函数,只需在提示中自行尝试)。
  • 复杂的答案:是的,JSON.stringify可以将任何javascript表达式转换为任何JSON子表达式。没有重大限制。

需要注意的是,它默认情况下无法执行此操作,并且无法以任何标准化方式执行此操作。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify - 特别是此处的replacer参数https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_parameter,这是一个类似于以下内容的函数:

function(key,value) {
    if (SPECIALLOGIC) {
        // ... return some special value
        //  like {__SPECIAL__:'datetime', value:'some_custom_encoding'}
    } else
        return value;
}

答案 3 :(得分:1)

限制包括对包含引发异常的循环引用的对象进行字符串化。

JSON.stringify(document);
// TypeError: Converting circular structure to JSON