< 戻る

ECMAScriptのステートメント

ECMAScriptの重要なステートメントを、以下に示す。

目次
  1. block ステートメント
  2. if ステートメント(else)
  3. イテレーションステートメント
  4. continue ステートメント
  5. break ステートメント
  6. switch ステートメント(case, default)
  7. throw ステートメントとtry ステートメント(catch, finally)

1. block ステートメント

ブロック文 (他の言語では 複合文 とも呼ばれる) は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧 (「波括弧」) の組で区切られ、場合によってはラベルが付くことがあります。

JavaScript では、ブロックは、中括弧( "{}")で囲まれた関連する文のコレクションです。 たとえば、if (条件) ブロックの後に文のブロックを置くことができます。これは、条件が真であればインタープリタがブロック内のコードを実行する必要があることを示し、条件が偽の場合はブロック全体をスキップします。

var x = 1;
let y = 1;

if (true) {
  var x = 2;
  let y = 2;
}

console.log(x);
// expected output: 2

console.log(y);
// expected output: 1

2. if ステートメント

if 文は、指定された条件が truthy ならば文を実行します。条件が falsy なら、もう一方の文を実行することができます。

function testNum(a) {
  let result;
  if (a > 0) {
    result = 'positive';
  } else {
    result = 'NOT positive';
  }
  return result;
}

console.log(testNum(-5));
// expected output: "NOT positive"
				

3. イテレーションステートメント

3-1. do-while ステートメント

do...while 文は指定された文を、テスト条件が false に評価されるまで実行するループを作成します。条件は文を実行した後に評価されます。結果として、指定された文は少なくとも 1 回は実行されます。

let result = '';
let i = 0;

do {
  i = i + 1;
  result = result + i;
} while (i < 5);

console.log(result);
// expected result: "12345"
					

3-2. while ステートメント

while 文は、テスト条件が true と評価されている間、指定された文を実行するループを作成します。条件はその文を実行する前に評価されます。

let n = 0;

while (n < 3) {
  n++;
}

console.log(n);
// expected output: 3
					

3-3. for ステートメント

for 文は、括弧で囲みセミコロンで区切った3つの引数と、続いてループ内で実行される文 (ふつうはブロック文) から成るループを構成します。

let str = '';

for (let i = 0; i < 9; i++) {
  str = str + i;
}

console.log(str);
// expected output: "012345678"
					

3-4. for-in ステートメント

for...in 文は、キーが文字列であるオブジェクトの列挙可能プロパティすべてに対して、継承された列挙可能プロパティも含めて反復処理を行います (Symbol がキーになったものは無視します)。

const object = { a: 1, b: 2, c: 3 };

for (const property in object) {
  console.log(`${property}: ${object[property]}`);
}

// expected output:
// "a: 1"
// "b: 2"
// "c: 3"
					

3-5. for-of ステートメント

for...of 文は、反復可能オブジェクト、たとえば組込みの String, Array, 配列状オブジェクト (例えば arguments や NodeList), TypedArray, Map, Set, およびユーザー定義の反復可能オブジェクトなどに対して、反復的な処理をするループを作成します。これはオブジェクトのそれぞれの識別可能なプロパティの値に対して、実行される文を表す独自の反復フックを呼び出します。

const array1 = ['a', 'b', 'c'];

for (const element of array1) {
  console.log(element);
}

// expected output: "a"
// expected output: "b"
// expected output: "c"
					

3-6. for-await-of ステートメント

for await...of 文は非同期および同期の反復可能オブジェクトを使用して、反復処理を行うループを作成します。たとえば、組込みの String, Array, 配列風オブジェクト (例えば arguments, NodeList など), TypedArray, Map, Set, さらに、ユーザー定義の非同期・同期の反復可能オブジェクトを使用することができます。これはオブジェクトのそれぞれの識別可能なプロパティの値に対して、実行される文を表す独自の反復フックを呼び出します。 await 演算子と同様に、この分は非同期関数の中でのみ使用されます。

const asyncIterable = {
  [Symbol.asyncIterator]() {
    return {
      i: 0,
      next() {
        if (this.i < 3) {
          return Promise.resolve({ value: this.i++, done: false });
        }

        return Promise.resolve({ done: true });
      }
    };
  }
};

(async function() {
   for await (let num of asyncIterable) {
     console.log(num);
   }
})();

// 0
// 1
// 2
					

4. continue ステートメントとbreak ステートメント

continue 文は、現在のループまたはラベル付きループの現在反復処理中の文の実行を終了して、次の反復処理でループの実行を続けます。

let text = '';

for (let i = 0; i < 10; i++) {
  if (i === 3) {
    continue;
  }
  text = text + i;
}

console.log(text);
// expected output: "012456789"

				

break 文は現在のループや switch 文やラベル文を中断し、中断した文の次の文にプログラムの制御を移します。

let i = 0;

while (i < 6) {
  if (i === 3) {
    break;
  }
  i = i + 1;
}

console.log(i);
// expected output: 3
				

5. switch ステートメント(case, default)

switch 文は式を評価し、その式の値が case 節と一致した場合は、その case に関連付けられた文を実行し、一致した case の後にある文も同様に実行します。

const expr = 'Papayas';
switch (expr) {
  case 'Oranges':
    console.log('Oranges are $0.59 a pound.');
    break;
  case 'Mangoes':
  case 'Papayas':
    console.log('Mangoes and papayas are $2.79 a pound.');
    // expected output: "Mangoes and papayas are $2.79 a pound."
    break;
  default:
    console.log(`Sorry, we are out of ${expr}.`);
}
				

6. throw ステートメントとtry ステートメント(catch, finally)

throw 文は、ユーザー定義の例外を発生させます。現在の関数の実行は停止し (throw の後の文は実行されません)、コールスタック内の最初の catch ブロックに制御を移します。呼び出し元の関数に catch ブロックが存在しない場合は、プログラムが終了します。

function getRectArea(width, height) {
  if (isNaN(width) || isNaN(height)) {
    throw 'Parameter is not a number!';
  }
}

try {
  getRectArea(3, 'A');
} catch (e) {
  console.error(e);
  // expected output: "Parameter is not a number!"
}
				

try...catch 文は、試す文のブロックをマークし、例外が発生したときの応答を指定します。

try {
  nonExistentFunction();
} catch (error) {
  console.error(error);
  // expected output: ReferenceError: nonExistentFunction is not defined
  // Note - error messages will vary depending on browser
}
				

7. KnotTextでのECMAScriptの分類

参考:MDN Web DocsでのECMAScriptの分類

7-1. グローバルオブジェクトのプロパティ(JavaScriptの実行環境がWebブラウザーの場合)

7-1-1. グローバルオブジェクトの値プロパティ

7-1-2. グローバルオブジェクトの関数プロパティ

7-1-3. グローバルオブジェクトのコンストラクタープロパティ

コンストラクターとは、「オブジェクトを作成する能力を持たせた」関数で、「new」演算子によってオブジェクトインスタンスを作成することができる。

プリミティブデータ型のラッパーオブジェクト
真偽値window.Boolean()
文字列window.String()
数値window.Number()
window.BigInt()
シンボルwindow.Symbol()
オブジェクトのためのオブジェクト
window.Object()
関数のためのオブジェクト
window.Function()
関数のより高度なオブジェクトwindow.GeneratorFunction()
window.Generator()
window.AsyncFunction()
window.Promise()
配列のためのオブジェクト
window.Array()
配列のより高度なオブジェクトwindow.ArrayBuffer()
window.DataView()
window.SharedArrayBuffer()
型付き配列のためのオブジェクトwindow.Int8Array()window.Int16Array()
window.Uint8Array()window.Uint16Array()
window.Uint8ClampedArray()
window.Int32Array()window.BigInt64Array()
window.Uint32Array()window.BigUint64Array()
window.Float32Array()window.Float64Array()
日付・時刻のためのオブジェクト
window.Date()
正規表現のためのオブジェクト
window.RegExp()
エラーのためのオブジェクト
window.Error()window.EvalError()
AggregateError
InternalError
window.RangeError()
window.ReferenceError()
window.SyntaxError()
window.TypeError()
URIError
Keyed Collections 特殊なデータ集合
マップwindow.Map()window.WeakMap()
セットwindow.Set()window.WeakSet()
Managing Memory
window.WeakRef()
Reflection
window.Proxy()

7-1-4. グローバルオブジェクトのその他のプロパティ

Atomics
window.Atomics()
JSON
window.JSON()
Math
window.Math()
Reflect
window.Reflect()

7-2. ECMAScriptの演算子「計算・論理・代入」

7-2-1. ECMAScriptの演算子「計算」

7-2-2. ECMAScriptの演算子「論理」

7-2-3. ECMAScriptの演算子「代入」


7-3. ECMAScriptのステートメント

block ステートメントブロックを作る
if ステートメント(else)条件を作る
イテレーションステートメントdo-while ステートメント必ず1回は実行されるwhileステートメント
while ステートメント条件を満たすまで繰り返す
for ステートメント指定した回数まで繰り返す
for-in ステートメントオブジェクトのためのforステートメント
for-of ステートメント配列状のオブジェクト全般のためのforステートメント
for-await-of ステートメントPromiseオブジェクトのためのfor-ofステートメント
continue ステートメント繰り返しの処理をスキップして次の繰り返しへ進む
break ステートメント繰り返し・ラベル・switchステートメントの処理を中断してステートメントから抜け出す
switch ステートメント(case, default)条件に一致するcaseを実行する
throw ステートメント関数の中で例外を発生させ、catchが存在すればcatchに移行する。
try ステートメント(catch, finally)catchのためのfinallyでtryする?

7-4. オブジェクトのためのパーツ

instanceofオブジェクトが自身のプロトタイプにコンストラクタのprototype プロパティを持っているか判別する
newnew 演算子を使用すると、開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができる
deleteオブジェクトからプロパティを削除する
in指定されたプロパティが指定されたオブジェクトにある場合にtrueを返す
superオブジェクトの親の関数を呼び出すために使用できる
プロパティアクセッサーオブジェクトのプロパティにアクセスする2種類の方法(ドット表記法、ブラケット表記法)
オブジェクトリテラルObject initializerによって作成するオブジェクト

7-5. 配列のためのパーツ

配列リテラル[a, b] = [1, 2] 代入 = [] 配列をつくる 配列リテラル 「配列」オブジェクト 配列初期化 Array()でも可

7-6. 関数のためのパーツ

functionキーワード いわゆるexpression 関数を作成する
return ステートメント
this[関数] キーワード
function*[ジェネレータオブジェクトを返す、ジェネレータ関数を定義]
yield(yield*)ジェネレータ関数 キーワード
async function キーワード 非同期関数
await Promiseオブジェクト 非同期関数内のみ
class(extends) いわゆるexpression ECMAScript 2015~のclass定義

7-7. その他のパーツ

use strictモード
,(comma) 演算子それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。
typeof 演算子対象の値のデータ型を返す
void 演算子必ずundefinedを返す
?.(Optional chaining) 演算子接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。
labeled ステートメントラベル付け?
import
export