仕事で奇妙なJavaScriptコードに取り組んでいるときに、これを見つけました:
string = decodeURIComponent(encodeURIComponent(string));
私の意見では、このコードは役に立たないので、削除する必要があります。しかし、おそらくそれはいくつかの非常に特殊なケースのハックです。グーグルは私にこの命令で他のプログラムが存在することを示しました。
それで、あなたはこれの結果が何であるか知っていますか?文字列のメモリコピーが遅いだけですか?
仕事で奇妙なJavaScriptコードに取り組んでいるときに、これを見つけました:
string = decodeURIComponent(encodeURIComponent(string));
私の意見では、このコードは役に立たないので、削除する必要があります。しかし、おそらくそれはいくつかの非常に特殊なケースのハックです。グーグルは私にこの命令で他のプログラムが存在することを示しました。
それで、あなたはこれの結果が何であるか知っていますか?文字列のメモリコピーが遅いだけですか?
それを見るだけで、それらは互いに打ち消し合い、返された文字列は元の入力文字列であると言えます。何かを逃さない限り、副作用はありません。
ただし、このようなコードは以前に見たことがあります
return unescape( encodeURIComponent( s ) );
と
return decodeURIComponent( escape( s ) );
これは、encodeURIComponent/decodeURIComponent が UTF8 に関連付けられているのに対し、escape/unescape は関連付けられていないという事実を利用しています。
手書きの JavaScript コードではなく、高度に最適化されたブラウザーのネイティブ コード内で発生する UTF-8 エンコード/デコード部分を除くすべてをキャンセルするのはハックです。
詳細な説明については、http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.htmlを参照してください。