序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタイルの問題です。 1 つのスタイルは、必要でない場合でもセミコロンを使用してステートメントを明示的に終了することです。もう 1 つのスタイルは、セミコロンをできるだけ使用せず、必要な場合にのみ追加することです。個人的にはセミコロンをつけるのは好きではないのですが、もちろんそれを好む友人もたくさんいます。どちらのスタイルを好むかにかかわらず、JavaScript のセミコロンについて知っておく必要のある詳細がいくつかあります。 コードにおけるセミコロンの役割セミコロンの主な機能は、プログラム ステートメントを終了するステートメント アサーション (EOS) として、パーサーがプログラムを正しく解析できるようにすることです。多くの C スタイル言語では、主に言語コンパイラの開発コストを削減するために、セミコロンを使用してステートメント行を明示的に終了します。しかし、最近のコンパイラは複数行のステートメントを適切に処理できるほどスマートです。 Go、Scala、Ruby、Python、Swift、Groovy など、多くの言語では明示的なセミコロンの終了は必要ありません。 JavaScript は C に似た言語ですが、C や Java とは異なります。JavaScript ではセミコロンもオプションであり、Auto Semicolon Insertion (ASI) と呼ばれる自動セミコロン挿入メカニズムがあります。 JavaScript の自動セミコロン挿入メカニズムJavaScript には、自動セミコロン挿入 (略して ASI) と呼ばれるメカニズムがあります。 ECMA-262 - 自動セミコロン挿入には、自動セミコロン挿入に関する明確な記述があります。 プログラムを左から右に解析します。文法生成規則に準拠しないトークン (問題のあるトークン) が検出されると、次のいずれかの条件が満たされている限り、問題のあるトークンの前にセミコロンが自動的に挿入されます。
プログラムを左から右に解析すると、トークンの入力ストリームが終了し、パーサーが入力トークン ストリームを単一の完全な ECMAScript プログラムに解析できない場合は、入力ストリームの最後にセミコロンが自動的に挿入されます。 プログラムを左から右に解析します。一部の文法生成規則で許可されているが制限された操作 (制限された生成) であるトークンに遭遇した場合、制限されたトークンと前のトークンの間に少なくとも 1 つの改行文字がある場合は、制限されたトークンの前にセミコロンが自動的に挿入されます。 ただし、上記のルールには追加の優先条件があります。セミコロンを挿入した後の解析結果が空のステートメントである場合、またはセミコロンを挿入した後で for ステートメントの先頭の 2 つのセミコロンのいずれかになった場合は、セミコロンは自動的に挿入されません。 注: 上記の翻訳は少しぎこちないです。何度か読み返したり、元の英語テキスト ECMA-262 - Automatic Semicolon Insertion を読んでみてください。 セミコロンの自動挿入簡単にまとめると、自動セミコロン挿入は改行に基づいています。パーサーは新しい行を現在の行にマージしようとします。新しい行は、ASI ルールに準拠している場合にのみ、独立したステートメントとして扱われます。 主な自動挿入ルールは次のとおりです。
上記のように、セミコロンを追加しないと、このコードを実行するとエラーが発生します。 セミコロンは省略できません通常、文が (、[、/、+、- で始まる場合、前の行の文の一部として解釈される可能性があります。実際には、/、+、- で始まる文はほとんどありません。ただし、(、[ で始まる文は非常に一般的であり、通常は防御的に行の先頭にセミコロンを追加できます。 先ほど、セミコロンの自動挿入について学習しました。ここで、いくつかの例を見てみましょう。 hey = 'hey'とする ['liu','liuxing'].forEach(console.log) ちょっと考えてみてください。上記の結果は何でしょうか?このコードを実行すると キャッチされない TypeError: 未定義のプロパティ 'forEach' を読み取ることができません ルール1に基づいて、上記のコードは次のコードに解析されます。 hey = 'hey'['liu','liuxing'].forEach(console.log) とします。 先頭にセミコロンを付けずに [ で始まるステートメントを使用すると、エラーが発生する可能性が高いことがわかります。 (で始まる文の別のサンプルコードを見てみましょう。 定数a = 1 定数b = 2 定数 c = a + b (a + b).toString() 上記のコードは値「3」を生成すると予想されますか?しかし、実際には、ASI ルールに従って次のコードに解析されるため、b は関数ではないというエラーが発生します。 定数 a = 1;定数 b = 2;定数 c = a + b(a + b).toString() /、+、- が文頭に使われるケースを一つ一つ紹介することはしません。このような状況は比較的まれなので、自分で試してみることができます。文が (、[/+、または - で始まる場合は、文の前にセミコロンを追加する必要があることに注意してください。 次に、return の使い方を見てみましょう。 (() => { 戻る { 名前: '劉星' } })() 名前付きのオブジェクトを返すことを期待していますが、undefined が返されます。これは、ASI がリターンにセミコロンを自動的に追加するためです。ここで、コードが正しく実行されるように、行を正しく折り返す必要があります。コード構造を明確にするには、正しいセミコロンに加えて、正しく適切な改行も必要であることがわかります。 要約するJavaScript の自動セミコロン挿入メカニズムについて学習し、JavaScript がいつセミコロンを自動的に追加するかを知りました。(、[、/、+、- の先頭にセミコロンを正確に追加する必要があります。自動セミコロン挿入メカニズムには、セミコロンを追加するか追加しないかの 2 つのオプションがあります。これは、完全にあなたまたはチームの好みによります。現在では、prettier や Eslint などのスタイルを自動的に統一するツールもあります。 JavaScript のセミコロンに関するこの記事はこれで終わりです。JavaScript のセミコロンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux 構成 SSH パスワードフリーログイン「ssh-keygen」の基本的な使い方
>>: Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策
目次1. フロントエンドの状態管理とは何ですか? 2. ヴュークス3. バス4. ウェブストレージ序...
実行中のコンテナに入る # コンテナに入り、新しいターミナルを開きます# docker exec -...
次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...
この記事では、vueカードスタイルのクリックして切り替える画像コンポーネントを参考までに紹介します。...
Ubuntu 18.04.4 に MySQL をインストールするプロセスを見てみましょう。内容は次の...
1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...
以下のように表示されます。 def test_write(self): フィールド=[] field...
背景AWS EC2 を使用するプロジェクトサービスがあります。セキュリティとパフォーマンスを考慮して...
目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...
レンダリングBlog Gardenでよく使われるスタイル /*タイトル h1 h2 h3 スタイル*...
この記事では、Webサイトを作ったことがある人にとっては馴染みのあるテーブルについて主に説明します。...
実験環境ApacheとTomcatは両方ともIPアドレス192.168.153.136のホストにイン...
序文「High Performance MySQL」では、インデックスでは範囲フィールドの後の部分が...
この記事の例では、文字の出現回数をカウントするJavaScriptの具体的なコードを参考までに共有し...
「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...