JavaScript | 予約語

javascrpit JavaScript
スポンサーリンク

1. 予約語(Reserved Words)とは

予約語とは、JavaScriptエンジンが言語構文としてすでに使用している単語のことです。
これらは変数名・関数名・クラス名などの識別子(identifier)として使えません

例:

// ❌ エラーになる例
var if = 10;     // SyntaxError: Unexpected token 'if'
function for() {} // SyntaxError

2. JavaScriptの主要な予約語リスト

(ECMAScript 2025に準拠)

分類キーワード
制御構文系if, else, switch, case, default, for, while, do, break, continue, return
宣言系var, let, const, function, class, import, export
例外処理try, catch, finally, throw
スコープ・継承this, super, extends, new
演算・比較系in, instanceof, typeof, delete, void
論理値/リテラルtrue, false, null, undefined(※ undefinedは予約語ではないが、再定義すべきでない)

3. 厳格モード(Strict Mode)での追加予約語

"use strict"; を宣言すると、より厳しい構文チェックが行われます。

次の単語はstrict modeでは予約語として扱われ、識別子に使用できません:

implements, interface, let, package, private, protected, public, static, yield

例:

"use strict";
let interface = 1; // ❌ SyntaxError: Unexpected strict mode reserved word

4. 将来の予約語(Future Reserved Words)

ECMA仕様では、将来追加されるかもしれないために予約扱いになっている単語もあります。
たとえば:

enum, await

enum は今後構文に使われる可能性があるため、現時点でも識別子に使うべきではありません。

awaitasync関数の中 でのみ予約語になります。

async function example() {
  let await = 5; // ❌ SyntaxError: await is reserved within async functions
}

5. コンテキスト依存キーワード(Contextual Keywords)

as, from, of などは「特定の構文の中でのみ」キーワード扱いされます。
それ以外の場面では通常の識別子として使えます。

// ✅ OK
let from = "Tokyo";

// ❌ NG(import構文の中では予約語扱い)
import x from "module";

6. 予約語をプロパティ名として使う場合

ES5以降、予約語をオブジェクトのプロパティ名として使用可能になりました。

const obj = {
  class: "Math",
  return: 5
};

console.log(obj.class); // ✅ "Math"

ES3ではこのような書き方はエラーになりましたが、現在の仕様では問題ありません。

7. 命名のベストプラクティス

予約語を避けるために、次のような命名規則を使うと安全です:

  • 接頭辞をつける:_class, myClass, className
  • $_ を補助的に使用
  • 将来の予約語 (enum, await, yield) は避ける
タイトルとURLをコピーしました