セクション7.6識別子名と識別子のECMAScript仕様から、有効な識別子は次のように定義されます。
Identifier ::
IdentifierName but not ReservedWord
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
\ UnicodeEscapeSequence
UnicodeLetter
any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”,
“Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.
UnicodeCombiningMark
any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”
UnicodeDigit
any character in the Unicode category “Decimal number (Nd)”
UnicodeConnectorPunctuation
any character in the Unicode category “Connector punctuation (Pc)”
UnicodeEscapeSequence
see 7.8.4.
HexDigit :: one of
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
これにより、変数に名前を付けたり、ゴルフをしたりする機会がたくさん生まれます。いくつかの例を試してみましょう。
有効な識別子のいずれかで開始することができUnicodeLetter
、$
、_
、または\ UnicodeEscapeSequence
。Unicode文字は、次のカテゴリのすべての文字です(すべてのカテゴリを参照)。
- 大文字(Lu)
- 小文字(Ll)
- タイトルケース文字(Lt)
- 修飾文字(Lm)
- その他の手紙(Lo)
- 文字番号(Nl)
これだけでも、いくつかのクレイジーな可能性を説明しています。すべてのブラウザで機能しない場合は、バグと呼んでください。
var ᾩ = "something";
var ĦĔĽĻŎ = "hello";
var 〱〱〱〱 = "less than? wtf";
var जावास्क्रिप्ट = "javascript"; // ok that's JavaScript in hindi
var KingGeorgeⅦ = "Roman numerals, awesome!";