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