String.split???2007年05月03日 02時56分10秒

バグっすか!?

IEやWSH(すなわちJScriptですな)で

"a|b/c".split( /(\||\/)/g );
を実行した結果が
a,b,c
になることに何の疑問ももっていなかったが、同じコードをFirefoxやOperaで実行すると以下のようになる。
a,|,b,/c
あれれ?

ためしにUnder Translation of ECMA-262 3rd Editionの15.5.4.14に掲載されているサンプルコード

"A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/)
を実行してみても、やはりIE/WSHだけ結果が違う。

つか、確信犯かよ

マイクロソフトのリファレンス(Script56.chm)で確認したら、

split メソッドの結果は、stingObj が separator の位置で分割されてできた文字列の配列です。separator は、配列要素の一部としては返されません。.
とか書いてある。思いっきり仕様と違うじゃん。

いやはや...

もともとはコンソールベースでWSH使ってるときに、よく読みこんだ外部ファイルを改行でsplitしたりしてたんだけど、似たようなことをJSDBでやったら改行のみの要素がぞろぞろ出てくるので、ありゃ?と思ったのが事の発端。よもやいくらMSでも、あからさまに仕様と違うことを堂々としていたとは...これって常識なんだろうか。

と思ったら、やはり同じようにハマった人がいたよ。

おまけ

ECMA262-3rdの仕様と違うといえば、これまたJScript固有で、名前付き無名関数(禅問答みたいだな..)の名前で外部から参照できるなんてステキ動作も。

var f = function myFunc(a) { return a; };

myFunc; // IE以外は未定義になる(ハズ)、IE/WSHでは「function myFunc~」
なんだかなぁ。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2007/05/03/1479429/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。