。 。 。ある人が私にこの質問をしました。 。私もよくわかりません
上記は正常に実行できます。 。結果は {test: "これはテスト フィールドを持つオブジェクトです"}
{test: "これはテスト フィールドを持つオブジェクトです"}
しかし、test フィールドに 二重引用符 を追加すると、非常に奇妙な問題が発生します。 リーリー
test
二重引用符
リーリー
驚くべきことは。 。エスケープ文字として \
を使用して、誤って次のようなコードを作成してしまいました。 。 。結果は正常です。
###しかし、なぜ?
それは、JSON.parse の実行プロセスが実際に 2 回のエスケープを経ているためです。
Once は文字列自体のエスケープです:
は
(この文字列はブラウザのコマンドラインに直接入力できます)
Once は文字列をオブジェクトに変換するときのエスケープです:
「"」は「"」のエスケープ文字とみなされ、オブジェクトに正しく変換されます。
「」が 1 つしかない場合、文字列をオブジェクトに変換するときに、テスト フィールドの値に二重引用符のペアが 2 つ存在し、エラーが報告されます。
ES5仕様の解析メソッドを再度確認してみました:
最初のステップは、対応する文字列自体をエスケープすることです
2番目のステップは文字列をオブジェクトに変換する際のエスケープに対応します
それは、JSON.parse の実行プロセスが実際に 2 回のエスケープを経ているためです。
Once は文字列自体のエスケープです:
リーリーは
に変換されます リーリー(この文字列はブラウザのコマンドラインに直接入力できます)
Once は文字列をオブジェクトに変換するときのエスケープです:
に変換されているため リーリー「"」は「"」のエスケープ文字とみなされ、オブジェクトに正しく変換されます。
「」が 1 つしかない場合、文字列をオブジェクトに変換するときに、テスト フィールドの値に二重引用符のペアが 2 つ存在し、エラーが報告されます。
ES5仕様の解析メソッドを再度確認してみました:
最初のステップは、対応する文字列自体をエスケープすることです
2番目のステップは文字列をオブジェクトに変換する際のエスケープに対応します