以下のプログラムを見て下さい。
String.prototype.indexForByte = function( start, byte ){
var str = this.substring( start ); // 調べる文字列を取得
var count = 0 ; // バイト数
for(var i=0;i<str.length;i++){
if( escape( str.charAt(i) ).length >= 4 ){
count += 2 ;
}else{
count++ ;
}
if( count > byte ) return i ;
}
return str.length ;
};
alert( "あいueお".indexForByte( 0, 5 ) ); // 結果は 3
alert( "あいうえお".indexForByte( 0, 8 ) ); // 結果は 4
alert( "aiうえお".indexForByte( 1, 3 ) ); // 結果は 2
このメソッドは「指定位置 start から、byte バイト分だけ進んだ位置を取得する」ものです。
例えば、
"あいueお".indexForByte( 0, 5 )
は、0 番目の文字から 5 バイトですので、'あ'=2バイト、'い'=2バイト、'u'=1バイトなので、結果は 3 になります。
これらの結果は InternetExplorer5 によるものですが、このプログラムを Netscape4.7, Netscape6 で実行するとエラーになります。
そのエラーの原因を当ててみて下さい。答えは次回、ここに公開します。(エラーはアルゴリズムやロジック的なものではなく,パッと見て気付くものです)
ちなみにこのメソッドは作成途中の Links コンテンツで実装したものですが、Netscape4 でこの一つのエラーのためにえらい時間をロスってます。NS6を立ち上げてすぐに分かりましたが・・・。