JSON.stringify は任意の JavaScript 変数をテキストに変換できますか? それとも制限(機能、プロトタイプなど)はありますか?
4 に答える
JSON.stringify(JSON.stringify)
これは undefined を返します。JSON は関数をサポートしていません。
JSON.stringify(/JSON.stringify/)
これは戻ります"{}"
。JSON.stringify は、列挙できないプロパティをスキップします。
JSON.stringify(JSON)
これは戻ります"{}"
。JSON.stringify は、サポートされていない値を返すプロパティをスキップします。
JSON.stringify(JSON.JSON = JSON)
これは例外をスローします。JSON は循環参照をサポートしていません。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
未定義、関数、または XML 値が変換中に検出された場合、それらは省略されるか (オブジェクトで見つかった場合)、null に打ち切られます (配列で見つかった場合)。
あなたの質問には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;
}
制限には、例外をトリガーする循環参照を含むオブジェクトの文字列化が含まれます。
JSON.stringify(document);
// TypeError: Converting circular structure to JSON