Java と JavaScript の \uXXXX

ちょっとした雑学を。

BMPしか扱えない\uXXXXは、JavaScriptJavaから受け継いだ Bad Legacy だ。

404 Blog Not Found:javascript - \uXXXXを使わない理由

のあたりを見て、ふと思い出したネタでも1つ。

java の場合

\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u0063\u006C\u0061\u0073\u0073\u0020\u0048\u0065\u006C\u006C\u006F\u007B\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006F\u0069\u0064\u0020\u006D\u0061\u0069\u006E\u0028\u0053\u0074\u0072\u0069\u006E\u0067\u005B\u005D\u0061\u0072\u0067\u0073\u0029\u007B\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u006C\u006E\u0028\u0022\u0048\u0065\u006C\u006C\u006F\u0020\u0077\u006F\u0072\u006C\u0064\u0021\u0022\u0029\u003B\u007D\u007D

これは正当な Java プログラムです。あまり知られていない感がたっぷりですが、Java は \uXXXX をソース中の任意の位置に使えます。このまま javac して java すると "Hello world!" と出力します。

javascript の場合

\u0061\u006C\u0065\u0072\u0074\u0028\u0022\u0048\u0065\u006C\u006C\u006F\u0020\u0077\u006F\u0072\u006C\u0064\u0022\u0029\u003B

これは不当な JavaScript プログラムです。JavaScript では \uXXXX は文字列リテラル正規表現リテラル、または識別子のコンテキスト上でしか使えません。