識別子というのは名前のことです。JavaScriptでは、識別子を使って変数や関数を指定します。また、特定のループのラベルとして識別子を使うことができます。
変数名は、識別子と呼ぶこともあります。識別子の命名には、ある一定のルールがあり、識別子の命名規則に従わない場合には JavaScriptの実行時にエラーが発生します。
JavaScriptでは、次のルールに従って識別子の命名を行います。
つまり、識別子の先頭に数字を記述することはできません。これは、JavaScriptが数字と識別子を簡単に区別できるようにするためです。識別子の例を以下に示します。
i
my_variable_name
v13
_dummy
$str
可搬性や編集のしやすさを考慮に入れて、識別子には ASCII文字と数字だけを使うのが一般的です。しかし、JavaScriptでは、Unicode文字集合の文字や数字を識別子に利用できる、ということを覚えておいてください(正確に言えば、ECMAScript標準では、識別子の2文字目以降には、カテゴリ Mn、Mc、Pc の文字が使えます)。このため、非英語言語の変数名を使ったり、数学的な記号を変数名に使ったりできます。以下に例を示します。
var sí = true;
var π = 3.14;
他の言語と同じように、JavaScript自身が使うために、ある識別子群を予約しています。これらの「予約語」は通常の識別子としては使えません。以下に予約語を挙げておきます。
予約語とは、プログラムによってあらかじめ用途が決められているキーワードのことです。以下に挙げるようなキーワードは、プログラム中で識別子として使うことはできません。
let break = "breakは予約後のためエラー"; // エラーが発生!
let breakTea = "これはエラーにならない";
さらに、以下のキーワードは、通常の JavaScriptコードであれば識別子として使えますが、JavaScript実行時に厳しくエラーチェックする strictモードの場合は予約語として扱われ識別子には使えません。現在の JavaScriptは、Strictモードを前提に実行するべきなので、以下のキーワードも識別子として使わないようにしましょう。
識別子の命名規則を守らない場合には、JavaScriptの実行時にエラーが発生します。しかし、ここで挙げているのはあくまで最低限守るべき規則なので、実際にはもう少し限定的な命名規則を使う必要があります。
例えば、エスケープシーケンスという特殊な文字列は、命名規則としても問題なく使用できます。しかし、現実的には、エスケープシーケンスを変数名に使うことはまずありません。このような特殊な文字列を変数名に使うと、不要なバグを招くからです。そのため、現実的に開発の時に使う命名規則は、以下のようになります。
識別子の命名には、一般的にキャメルケース、スネークケース、または(限定的な状況で)パスカルケースといった手法が使われます。
スネークケースでは、単語と単語をアンダースコア( _ )で結合し、全て小文字で表現します。
let person_name = "太郎";
let favarite_place_in_japan = "札幌";
小文字とアンダースコアで構成された識別子が、蛇が地上を這っているように見えるため、スネークケースと呼びます。
キャメルケースでは、単語と単語を結合して、1つ目の単語は小文字で始め、2つ目以降の単語の先頭は大文字にします。
let personName = "太郎";
let favoritePlaceInJapan = "札幌";
結合された部分がラクダのコブのように見えるため、キャメルケースと呼びます。
近年のトレンドとしては、変数名や関数名にはキャメルケースを使います(ES5あたりまでは変数名や関数名にスネークケースが使われていましたが、近年ではキャメルケースが主流です)。
パスカルケースは、キャメルケースと似ていますが、一番最初の単語も大文字で始めます。一般的にパスカルケースは、コンストラクタ関数やクラスで使用されるため、それら以外には使わないようにしましょう。これは、開発者間の暗黙的なルールの1つです。
// クラスの場合
class MyClass { }
// コンストラクタ関数の場合
function My Function() { }
// 一般的な変数にはパスカルケースは使用しない
let PersonName = "太郎";