jordan_bethの日記: JScript : String.split の腐った仕様 3
Microsoft に憤る第二弾。
某氏の「いまどきcmd.exeでもなかろうよ」にそそのかされたかどうかはわからないが、前回の del にしてやられ、ほとんどのコードがなくなって、「どーせ書きなおすなら…」と、JScript on WSH でコーディング中。(Power Script は XP 非標準なので却下。 Javascript なら経験あったのである程度行けるという見込みはあった)
で、とあるライブラリの unittest で、どーしてもテストをパスしない箇所があり、調べみたら String オブジェクトの split メソッドにおかしな挙動を発見。
a = '\nabc';
as_str = a.split('\n');
as_re = a.split(/\n/);
WScript.Echo('[' + as_str + '](' + as_str.length + ')');
WScript.Echo('[' + as_re + '](' + as_re.length + ')');
これを実行すると次の出力となる。
[,abc](2)
[abc](1)
最初の文字がセパレータそれ自身である文字列を split すると、正規表現では最初の文字を無視してしまうようだ。
なんで?
どうしてこういう余計な処理をしてくさるの?
余計な処理をしてくれたおかげで、最初の文字が何なのかチェックして、分割後に足りない分を追加する、なんていうアホみたいな処理をやらなきゃならなくなるじゃん.....
#ちなみに Firefox の Javascript 実装だときちんと第一要素に空文字をつけた配列を返してくれる