JavaScriptの識別子(変数名、関数名、プロパティ名など)の2文字目以降に中黒「・」(U+30FB KATAKANA MIDDLE DOT)が使えるようになりました。以下のコードはChrome 124では構文エラーになりますが、Chrome 125では問題なく実行できます。
const シン・ゴジラ = 2016;
中黒が使えるようになったのは、JavaScript(ECMAScript)の仕様が変わったからではありません。変わったのはUnicodeの仕様のほうです。Unicode 15.1.0(2023年9月)においてOther_ID_Continue
プロパティ(を持つ文字の集まり)に中黒が追加されました。
そもそもJavaScriptの識別子に使える文字は、Unicodeを参照して定義されています。ECMAScript 2023(2023年6月)では以下のようになっています。
ID_Start
プロパティを持つ文字$
(U+0024 DOLLAR SIGN)_
(U+005F LOW LINE)ID_Continue
プロパティを持つ文字$
(U+0024 DOLLAR SIGN)(いわゆるアンダースコア「_」はID_Continue
プロパティを持つため、2文字目以降にも使えます。)
Unicodeの仕様も毎年のように改定されますが、ECMAScript仕様ではUnicodeの「最新バージョン」が参照されています。
UnicodeのID_Start
、ID_Continue
プロパティは、各種の「識別子」に使える文字として推奨されるものを表しており、UAX #31 Unicode Identifiers and Syntaxで以下の文字を含むものとして定義されています。
ID_Start
プロパティLetter
である文字Letter_Number
である文字Other_ID_Start
プロパティを持つ文字Pattern_Syntax
プロパティまたはPattern_White_Space
プロパティを持つ文字を除く(具体的には〓
(U+2E2F VERTICAL TILDE)が除かれる)ID_Continue
プロパティID_Start
プロパティを持つ文字Nonspacing_Mark
である文字Spacing_Mark
である文字Decimal_Number
である文字Connector_Punctuation
である文字Other_ID_Continue
プロパティを持つ文字Pattern_Syntax
プロパティまたはPattern_White_Space
プロパティを持つ文字を除くここでOther_ID_Start
プロパティとOther_ID_Continue
プロパティというのは、後方互換性のためにそれぞれID_Start
プロパティとID_Continue
プロパティに含めるべき文字を表しています。Other_ID_Continue
プロパティに中黒(U+30FB)が追加されたことで、巡り巡ってJavaScriptの識別子に中黒が使えるようになったのです。
なお、中黒だけでなくゼロ幅非接合子(U+200C)とゼロ幅接合子(U+200D)も追加されたため、ECMAScript 2024以降では識別子の2文字目以降に使える文字の定義が「UnicodeのID_Continue
プロパティを持つ文字または$
(U+0024 DOLLAR SIGN)」と簡潔になる予定です。
ID_Continue
プロパティの後方互換性のために中黒が追加されたということは、さらに以前は中黒がID_Continue
プロパティに含まれていたのでしょうか?
まさにその通りで、Unicode 4.0.1(2004年5月)以前は中黒の一般カテゴリがConnector_Punctuation
になっており、結果としてID_Continue
プロパティに含まれていました。Unicode 4.1.0(2005年3月)で中黒の一般カテゴリがOther_Punctuation
に変更され、ID_Continue
プロパティに含まれなくなっていたのです。
セコメントをする