2

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

4

4 回答 4

5
JSON.stringify(JSON.stringify)

这将返回未定义;JSON 不支持函数。

JSON.stringify(/JSON.stringify/)

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

JSON.stringify(JSON)

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

JSON.stringify(JSON.JSON = JSON)

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

于 2013-06-12T17:40:13.867 回答
2

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

如果在转换过程中遇到未定义、函数或 XML 值,则它要么被忽略(当它在对象中找到时),要么被审查为 null(当它在数组中找到时)。

于 2013-06-12T17:41:13.103 回答
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;
}
于 2013-06-12T17:52:38.077 回答
1

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

JSON.stringify(document);
// TypeError: Converting circular structure to JSON
于 2013-06-12T17:41:24.957 回答