Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
while 文は、テスト条件が真と評価されている間、指定された文を実行するループを作成します。条件はその文を実行する前に評価されます。
ループを通過するごとに、その前に評価される式。この条件が真と評価された場合は、 statement が実行されます。条件が偽と評価された場合は、実行は while ループの後の文に続きます。
statement条件が真と評価される限り実行される文。複数の文を実行するには、ブロック文を使用することができます。
他のループ文と同様に、statement の中でフロー制御文を使用することができます。
次の while ループは、 n が 3 より小さい間反復します。
それぞれの反復で、ループは n を増加させ、それを x に加えます。したがって、 x および n は次の値をとります。
3 回目の通過が完了した後、条件 n < 3 は真ではなくなり、ループは終了します。
場合によっては、代入を条件として使用することに意味があることもあります。これは読みやすさとトレードオフの関係にあるので、このパターンを誰にでもわかりやすくするための、ある種の文体上の推奨事項があります。
次の例は、文書のコメントを反復処理し、コンソールにログ出力するものです。
これは完全によい例とは言えません。特に次の行があるからです。
その行の動作は、毎回コメントノードが得られるという点では問題ありません。
…そして、文書中にコメントノードがなくなったとき、次のようになります。
この行の問題は、条件式にはふつう比較演算子、例えば === を使用するものですが、この行の = は比較演算子ではなく、代入演算子です。そのため、= は === の間違いのように見えてしまいます(実際には間違いではなくても)。
従って、このようにすると、一部のコードリンティングツール、例えば ESLint の no-cond-assign ルールなどは、誤記の可能性があるものを発見して修正しやすくするために、以下のような警告を報告します。
Expected a conditional expression and instead saw an assignment.(条件式が期待されるところに代入がありました。)
多くのスタイルガイドでは、条件式に代入式を書くことが意図的であることを、より明確に示すことを推奨しています。それを行うための最小限の方法として、括弧をグループ化演算子として追加して代入式を囲む方法があります。
実際、これは ESLint の no-cond-assign の既定値や Prettier で強制されているスタイルなので、このパターンをよく見かけるでしょう。
条件を明示的な比較に変えるために比較演算子を追加することを勧める人もいます。
このパターンは他にも書き方があります。
あるいは、while ループを使用するアイディアを完全に放棄する方法もあります。
読者が条件式のパターンとして代入式を記述することに十分に慣れていれば、これらの読みやすさはすべて同じくらいのはずです。そうでなければ、最も冗長ではありますが、最後の形式が最も読みやすいでしょう。
| ECMAScript® 2027 Language Specification # sec-while-statement |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。