chanting an air of joyous bliss

普段の生活で見逃しがちな面白いことを書いていく
そんなブログです

mathesの挙動

2007-06-29 20:52:21 | コンピュータ・プログラミング
JavaScriptの文字列には指定した正規表現で文字列のマッチングを行うmatchメソッドが用意されている。
例えば時刻のフォーマットのチェックを行うには次のようにすることができる
    //"true"が表示される
    alert( "12:23:43".match(/[12]+d:[0-5]d:[0-5]d/)) 

また、オプション"g"を指定することで、最初にマッチした部分に加え、2番目、3番目...にマッチした部分も配列として返すこともできる。
    //12時23分43秒と表示される
    var collection = "12:23:43".match(/d+/g);
    alert(collection[0]+"時"+collection[1]+"分"+collection[2]+"秒");

また、上の例ではfor-in構文を使って配列の中身を列挙できる
//画面に12,23,43と表示される・・・はず?
    for(var i=0 in collection){
        alert(collection[i])
    }
はずなのだが、FireFoxでは12,23,43と期待した通りに表示されるのだがIEだと変な値まで表示されるようになる。
ちなみに、次の構文だとIEでも12,23,43表示される。
//これはIEでも画面に12,23,43と表示される
    for(var i=0 i < collection.length;i++){
alert(collection[i]) }
どうやら、IEではmatchで返却される配列中身を走査するときfor-in構文とfor(;;)構文とでは挙動が変わってしまうらしい。

*googleで"javascript for in"で検索したら、次のサイトが見つかった
"これは凶悪だっっっ! JavaScriptの"for~in"構文の罠"
IEだけでなく、他のブラウザもどうやらfor-inの構文の挙動はC#やjavaのものとは違った動作をするようですね・・・・。
FireFoxも昔の1.07のバージョンでは変な動きをするようですが・・・・
ちなみに、今私の使っているFireFox1.5はC#やJavaと同じ動きをするようです

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Vガンダムが面白いと思ったのは | トップ | WASでSQLのトレースを取れる... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

コンピュータ・プログラミング」カテゴリの最新記事