1. 予約語(Reserved Words)とは
予約語とは、JavaScriptエンジンが言語構文としてすでに使用している単語のことです。
これらは変数名・関数名・クラス名などの識別子(identifier)として使えません。
例:
// ❌ エラーになる例
var if = 10; // SyntaxError: Unexpected token 'if'
function for() {} // SyntaxError2. 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 word4. 将来の予約語(Future Reserved Words)
ECMA仕様では、将来追加されるかもしれないために予約扱いになっている単語もあります。
たとえば:
enum, awaitenum は今後構文に使われる可能性があるため、現時点でも識別子に使うべきではありません。
await は async関数の中 でのみ予約語になります。
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) は避ける
