【JavaScript】変数名に日本語(2バイト文字)を使用する条件
更新日:2024/02/27
JavaScriptは変数名に日本語を使用できます。
ですが全ての文字を使用できるわけでなく、ある条件を満たすものが使用できます。
変数名は日本語を使用可能
変数名や関数名は日本語で記述できます。
そこで、日本語をふんだんに使ってコードを作成してみました。
const 変数1 = 100;
const 変数2 = 200;
const オブジェクト = {
プロパティ1 : 変数1,
プロパティ2 : 変数2
};
const 二つの値の合計を求める関数 = ( 値1 , 値2 ) => 値1 + 値2;
const 合計結果 = 二つの値の合計を求める関数(
オブジェクト.プロパティ1 , オブジェクト.プロパティ2 );
const ログをコンソールに出力する関数 = console.log;
ログをコンソールに出力する関数( 合計結果 ); // 300
C言語やアセンブラなどからプログラミングを始めた僕のような技術者から見ると、とてもファンタジーなコードです。
でも問題なく動作します。
実はアルファベットと日本語の区別がない
JavaScriptの文字列はUTF-16という形式でメモリ上に保持されます。
UTF-16とはUNICODEという文字セットを16バイト単位で扱うための規格です。
UNICODEには半角と全角の区別なく、全て含まれています。
JavaScriptから見ると、同じデータを使用しているだけで、アルファベットか日本語かどうかの使いわけをしていないのです。
使えない文字もある
全ての文字が変数名として使用できるわけではありません。
例えば、絵文字を変数名に使用するとエラーになります。
const 🐶 = 100; // SyntaxError: illegal character U+1F436
文字が変数名として使用できるかどうかは、文字がID_StartまたはID_Continueプロパティを持っているかどうかを確認する必要があります。
ID_Startを持っていると変数の先頭から、ID_Continueは途中から変数名として使用できます。
ID_StartまたはID_Continueプロパティは、正規表現で確認できます。
今回は、関数化しました。
ID_Startプロパティを確認する関数
const isID_Start = e => /\p{ID_Start}/u.test(e);
ID_Continueプロパティを確認する関数
const isID_Continue = e => /\p{ID_Continue}/u.test(e);
それぞれの関数に文字を一文字渡すと、trueまたはfalseで結果が返ってきます。
いくつか、関数を使って確認してみましょう。
半角アルファベットはtrue判定です。
変数名として使用できます。
文字 | ID_Start | ID_Continue |
---|---|---|
a(\u61) | true | true |
b(\u62) | true | true |
c(\u63) | true | true |
ひらがなもtrue判定です。
変数名として使用できます。
文字 | ID_Start | ID_Continue |
---|---|---|
あ(\u3042) | true | true |
い(\u3044) | true | true |
う(\u3046) | true | true |
記号はfalse判定です。
これらは変数名として使用できません。
文字 | ID_Start | ID_Continue |
---|---|---|
#(\u23) | false | false |
$(\u24) | false | false |
%(\u25) | false | false |
_(\u5F) | false | true |
使用できないはずですが、一部使用できる記号が混ざっています。
理由は次の項で解説します。
絵文字や一部の2バイト文字もfalse判定です。
こちらも変数名として使用できません。
文字 | ID_Start | ID_Continue |
---|---|---|
🐶(\uD83D\uDC36) | false | false |
…(\u2026) | false | false |
「(\u300C) | false | false |
$と_は使用できる
前項で、$ と _ は、ID_StartとID_Continueプロパティ判定でfalseでした。
しかし、実際には変数名として使用できます。
この理由はとても単純で、JavaScriptの仕様で『$ と _ も変数名として使用できる』と定義されているからです。
■【JavaScript】 変数名の$(ドルマーク)はどんな意味がある?
判定ツール
ID_StartとID_Continueプロパティを判定する単純なツールを作成しました。
よかったら使ってみてください。
そもそも日本語で変数名を記述しないよね…
どう考えても需要がないツールですね…
更新日:2024/02/27
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。