セクション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!";