JavaScriptのラインエンディング

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-03-08 00:49:18931ブラウズ

Line endings in Javascript

JavaScriptのラインエンディング

私は今日の大半をJavaScriptのラインエンディングと戦っていましたが、最終的に共有する価値のあるいくつかの結果を見つけました。

ご存知かもしれませんが、謙虚なラインブレイクには、どのオペレーティングシステムが破損しているかに応じて、実際には3つのフォームがあります。 Unixマシンでは、単一の新しいライン文字「n」がジョブを行います。 Macでは、キャリッジリターン「R」が使用されます。 DOSとWindowsは両方を使用しています:「RN」。それは、何を見ているのかわからない場合、あなたを強く噛むことができる比較的微妙な問題の1つです。

今日、私はJavaScript関数を構築して、単一のNewlinesをTextarea内のNewlinesを2倍にするという単純な問題を任されました。私の最初の試みは次のように見えました:

var doublenewlinesre = /([^n])n([^n]) /g; 関数doubleNewlines(obj){ obj.value = obj.value.replace(doublenewlinesre、 "$ 1nn $ 2"); } double newlines

上記のコードでは、新しいラインではないもののすべてのインスタンスを見つける単純な正規表現を使用し、その後に新しいラインが続き、その後に新しいラインではない他のものが続きます。このパターンのインスタンスは、1つではなく中央に2つのニューラインで同じパターンに置き換えられます。 Firefoxは、どんなプラットフォームで実行されていても、Newlinesを「n」として扱うため、これはWindows、Linux、Macの両方のFirefoxで正常に機能しました。これらのブラウザはそれぞれ「RN」と「R」を使用しているため、WindowsとIEはMacintoshの場合に壊れました。

十分に公平です。この問題の通常の解決策は、3つの組み合わせのそれぞれをあなたの好みの単一の結末(私の場合は「n」)に置き換えることにより、変換を実行する前にラインエンディングを正規化することです。これが関数での私の2回目の試みです:
関数doubleNewlines(obj){ obj.value = obj.value.replace(/(rn | r | n)/g、 'n'); obj.value = text.replace(doublenewlinesre、 "$ 1nn $ 2"); }

それもうまくいきませんでした。多くの頭をひっかき、アラートボックスでデバッグし、突っ込んだ後、私は最終的に文書化されていない、ほとんど心の曖昧な「機能」を発見しました。インターネットエクスプローラーの「機能」:入力オブジェクトの値属性に文字列を割り当てるとき、すなわち素敵な「n」ラインのエンディングをプラットフォームの優先に変換します。 Microsoftのドキュメントはこれに注目していませんが、これがインターネットエクスプローラーのWindowsバージョンとMacバージョンの両方で発生することを確認しました。

bizzalely、隠しフォームフィールドオブジェクトの値属性に割り当てる場合、変換は行われません。ラインエンディングは、テキスト領域に割り当てた場合にのみ変更されます。

次のコードは、リストされているコードとの関数は一見同一であるように見えますが、私が望んでいることを正確に行います。関数doubleNewlines(obj){ var text = obj.value; text = text.replace(/(rn | r | n)/g、 'n'); obj.value = text.replace(doublenewlinesre、 "$ 1nn $ 2"); }


正規化されたバージョンは、TextAreaオブジェクトの値属性に直接割り当てられるのではなく、変数に割り当てられているため、これは正常に機能します。したがって、IEの自動ラインエンディング変換は、スクリプトの終了まで遅延し、2番目の正規表現で大混乱を再生できません。

最後に、スタイルに関するメモ。問題を解決するために迅速に作業するのではなく、コードの再利用について考えていたら、おそらくこのようなものを思いついたでしょう:

関数doubleNewlines(テキスト){ text = text.replace(/(rn | r | n)/g、 'n'); return text.replace(doublenewlinesre、 "$ 1nn $ 2"); } double newlines

OnClickハンドラーでもう少しコードが必要ですが、文字列操作だけを抽象化しますが、変換の問題を完全に回避しました。それでも、少なくとも私はIEの小さな癖のもう1つを理解してくれました。
JavaScriptのラインエンディングに関するよくある質問(FAQ)

JavaScriptのラインエンディングの重要性は何ですか?

JavaScriptのラインエンディングは、ステートメントの終わりを示すために重要です。 JavaScriptでは、各ステートメントはセミコロン(;)によって区切られています。ただし、JavaScriptの通訳者は、行方不明の場合、ラインの端にセミコロンを自動的に挿入するのに十分賢いです。この機能は、自動セミコロン挿入(ASI)として知られています。それにもかかわらず、潜在的なエラーや予期しない結果を避けるために手動でセミコロンを含めることは良い習慣と考えられています。新しいラインのエスケープシーケンスは「n」です。たとえば、2つの文の間に新しいラインを追加する場合は、このように行うことができます。「HellonWorld」です。この文字列が印刷されると、「Hello」と「World」は別々の行にあります。ただし、オペレーティングシステムによっては異なる方法で使用されます。 「N」はUNIXベースのシステム(LinuxやMacなど)の新しいライン文字として使用され、「RN」はWindowsで使用されます。 「R」文字はキャリッジリターンを表し、次の行に進むことなくカーソルをラインの最初に移動します。たとえば、「He​​llonnworld」は「Hello」と「World」の間に2回のラインブレークを追加します。

JavaScriptのラインブレークにHTMLタグを使用できますか?

はい、HTMLコンテンツを使用しているときにJavaScriptのラインブレークにHTMLタグを使用できます。 「
」タグを使用して、ラインブレークを追加できます。たとえば、「hello
world」は、HTMLドキュメントに表示されると「Hello」と「World」の間にラインブレークを追加します。 JavaScriptのシングルラインコメントは「//」で始まり、ラインブレークで終了します。同じ行の「//」の後のすべてがコメントと見なされ、JavaScriptインタープリターによって無視されます。このシーケンスは、新しいライン文字を文字列に挿入し、ラインブレークを効果的に作成します。

自動セミコロン挿入(ASI)は、ラインエンディングをどのように処理しますか?これは、ステートメントの最後にセミコロンを置くことを忘れたとしても、JavaScriptはそれを正しく解釈することを意味します。

ラインエンディングを使用してJavaScriptコードをフォーマットできますか?ラインエンディングを適切に使用すると、コードがより読みやすく、メンテナンスが容易になります。各ステートメントの新しい行を開始するか、コードのブロック(関数やループなど)の後に開始することは一般的な慣行です。

ラインエンディングは、JavaScriptコードの実行にどのように影響しますか?ただし、自動セミコロン挿入(ASI)の観点からコードの実行に影響を与える可能性もあります。線の終わりが誤って配置されている場合、セミコロンの自動挿入により、予期せぬ結果につながる可能性があります。したがって、ラインエンディングを正しく理解して使用することが重要です。

以上がJavaScriptのラインエンディングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。