2007年02月25日

Javascript:for のちょっと変わった使い方

for(var i = 0; i < 10; i++){処理・・・}
for(var i in object){処理・・・}

なんてのは、よく目にしますが・・・。

for(var i = ['あ', 'い', 'う']; i[0]; i.shift()){ alert(i[0]); }
これでも。i に配列を代入して、i[0] が false を返すようなものではない間、shift で i に代入された配列を削っていきます。ということで、この場合は、あ、い、う、と表示される。

当然。もっと自由に考えれば。
var o = {
  v : 2,
  fn : function (){this.v = this.v * 2},
  en : function (){
    if(this.v < 10) return true;
    alert(this.v);
  }
};
for(; o.en(); o.fn()){}
なんてのも。
わざわざこんな処理に冗長な例ですが・・・。for 内の処理や条件を外部で、作成・変更できたりと、結構自由に使えます。ただ。やり過ぎると、深刻な混乱を招いたりするので、誰が見ても分かりやすい物にした方が無難かも。

私は遊びで使ったりします。ひょっとしたら嫌う人もいるかもしれない。


posted by HiFa at 03:01 | 🌁 | Comment(2) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

この方法は推奨されません。
たとえば、inの対象となるオブジェクトに組み込み意外のprototypeが設定されていた場合、プロトタイプチェーンを辿ってしまうので、ループ変数に余計なものが含まれてしまいます。
万全を期するために、普通は
for(var item in obj){
if(hasOwnProperty(item)){
//目的の処理
}
}
とします。
Posted by at 2008年05月17日 20:15
コメント返信遅れました。
うーん。for の変わった使い方ということでちょっと趣旨違うかも。

おっしゃっているのは in を使う場合の動作の問題ですね。
in を使う場合、ご指摘の懸念は「どんな目的で in を使うか」の1ケースに過ぎません。

場合によっては hasOwnProperty 以外も取得したい場合がある事を考慮すると hasOwnProperty が必ず必要という訳ではありません。
ま、大抵意図してないのでデフォでも良いかも知れませんが。

ちょっと訂正すると、頂いたコードでは obj. が抜けてると・・・。
Posted by Hifa at 2008年06月12日 00:48
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック