Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

式文

式文は、文を記述すべき場所で使用する式です。式は評価され、その結果は捨てられます。したがって、関数の実行や変数の更新など、副次的な効果のある式にのみ意味があります。

構文

js
expression;
expression

評価する任意のです。他の文と紛らわしい特定の式は曖昧ですので禁止されています。

解説

文専用の構文とは別に、ほとんどすべてのをそれ自体で文として使用することもできます。式の構文では、終わりにセミコロンが必要ですが、セミコロンがないために構文が不正になる場合は、自動セミコロン挿入で挿入されることがあります。

式は発生した後に破棄されるため、式の結果は利用できません。したがって、式が有益なものとなるためには、式に何か副次的な効果がある必要があります。式文は一般的に次のものです。

他にも副次的な効果がある場合があるものとして、ゲッターの呼び出しや型変換の実行があります。

禁止されている式

式を文として使用するためには、他の文の構文とあいまいであってはいけません。したがって、式は以下のいずれかのトークンで始めてはいけません。

従って、以下のものは全て不正です。

js
function foo() {  console.log("foo");}(); // SyntaxError: Unexpected token '('// 何らか理由で、`let` という変数を作ったvar let = [1, 2, 3];let[0] = 4; // SyntaxError: Invalid destructuring assignment target{  foo: 1,  bar: 2, // SyntaxError: Unexpected token ':'};

さらに危険なことに、たまたま有効な構文であったとしても、意図しないコードになってしまうこともあります。

js
// 何らか理由で、`let` という変数を作ったvar let = [1, 2, 3];function setIndex(index, value) {  if (index >= 0) {    // 配列 `let` に割り当てるつもりが、余計な変数を作成してしまう!    let[index] = value;  }}setIndex(0, [1, 2]);console.log(let); // [1, 2, 3]// これはオブジェクトリテラルではなくブロック文となり、// `foo` はラベル、`1` は式文になる// コンソールで起こることが多い{ foo: 1 };

このような問題を避けるために、括弧を使用することで、一義的に式文となるようにすることができます。

js
(function foo() {  console.log("foo");})();

制御フロー文の回避

制御フロー文の使用は、式文を使ってほとんど避けることができます。例えば、if...else三項演算子論理演算子に置き換えることができます。forfor...of のような反復処理文は、配列メソッドに置き換えることができます。

js
// 制御フロー文の使用function range(start, end) {  if (start > end) {    [start, end] = [end, start];  }  const result = [];  for (let i = start; i < end; i++) {    result.push(i);  }  return result;}// 式文の使用function range2(start, end) {  start > end && ([start, end] = [end, start]);  return Array.from({ length: end - start }, (_, i) => start + i);}

警告:これは、言語の能力の一端を示すに過ぎません。制御フロー文の代用として式文を過剰に使用すると、コードの可読性が大幅に低下する可能性があります。

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-expression-statement

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp