« metacon2009に参加して -勉強会をブームにしてはいけない- | メイン | Skypeの特定のroomで発言できなくなる問題 »

世にも奇妙なJavaScriptの機能

タイトル大袈裟過ぎ。
今は亡き某チャットで出てきた話だけど、誰も書き留めていないみたいなので書いておく。
大文字小文字変換
大文字小文字を変更するtoUpperCaseメソッドとtoLowerCaseだけど、実は全角にも適応できる。
"a".toUpperCase(); //=>"A"
"A".toLowerCase(); //=>"a"
それどころか、こんな文字も変換可能。
"α".toUpperCase(); //=>"Α"
"Α".toLowerCase(); //=>"α"
"ω".toUpperCase(); //=>"Ω"
"Ω".toLowerCase(); //=>"ω"
"ψ".toUpperCase(); //=>"Ψ"
"Ψ".toLowerCase(); //=>"ψ"
"ա".toUpperCase(); //=>"Ա"
"Ա".toLowerCase(); //=>"ա"
"â".toUpperCase(); //=>"Â"
"Â".toLowerCase(); //=>"â"
でも、グルジア文字は片方向しか無理。そういう規則のある文字なのかJavaScriptのバグなのかは不明。(Firefox3.0の話)
"თ".toUpperCase(); //=>"თ"
"Ⴇ".toLowerCase(); //=>"თ"
上記は、他のブラウザでも可能なはず。
存在しないメソッドコールに反応
Rubyのmethod_missingと同じ。こっちはFirefox限定のはず。
Object.prototype.__noSuchMethod__=function(methodName,argsArray){
    return "存在しないメソッドが呼ばれました。 "+methodName+"("+argsArray.join(",")+")";
};
["a","b","c"].fooBar("foo","bar"); //=>"存在しないメソッドが呼ばれました。 fooBar(foo,bar)"
2009/06/13 追記
文字の大文字小文字についてはてなブックマークやWassrで色々教えてもらったので引用。
自作Blog更新ツールが、インラインのタグ設定に対応していないので、リンクは貼れずURLの表記のみとなってる。
最後のUnicode3.0については、はせがわさんも自身がないとの事です。

大文字小文字の概念は同じ文字でも文化的背景で異なるので注意。→http://blogs.msdn.com/oldnewthing/archive/2003/09/05/54802.aspx
http://www.unicode.org/Public/UNIDATA/CaseFolding.txt / 音素文字なら大文字小文字があるという訳ではない。
http://unicode.org/cldr/utility/character.jsp?a=10D7 http://unicode.org/cldr/utility/character.jsp?a=10A7 http://unicode.org/cldr/utility/character.jsp?a=2d07
調べた。toUpperCase/toLowerCaseはECMA-262ではUnicodeに従って大文字小文字変換。Unicode 3.0+ では U+10A7(大文字)とU+2D07(小文字)の相互変換が可能だけど、Unicode 2.x では U+10A7(大文字) から U+10D7(小文字) に一方通行の変換。ECMA-262では従うべきUnicodeのバージョンは「2.1 or later」なので、結論としては仕様に従った動作。

トラックバック

このエントリーのトラックバックURL:
http://www.kanasansoft.com/cgi/mt/mt-tb.cgi/235

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google