for in と hasOwnProperty の組み合わせ

JavaScriptでオブジェクトを連想配列のように扱い、全部のキーと値に対して何かをしたい場合、for in を使いつつ、hasOwnProperty でそのオブジェクトが持っているかどうかチェックするために以下のようなコードを書くことが多いのかなと思います。

Object.prototype.parent = "Parent!";
var obj = { name: "koba04", from: "kyoto" };

for (var key in obj ) {
    if ( obj.hasOwnProperty(key) ) {
         console.log(key + ":" + obj[key]);
    }
}

// name:koba04
// from:kyoto

http://d.hatena.ne.jp/koba04/20110918/1316357080
上のエントリでは混乱しそうと書いたのですが、for in と hasOwnProperty のイディオムとして、下記のような書き方はちょっとアリかなーと思ったりしているのですがどうなんでしょう。

Object.prototype.parent = "Parent!";
var obj = { name: "koba04", from: "kyoto" };

for (var key in obj ) if ( obj.hasOwnProperty(key) ) {
    console.log(key + ":" + obj[key]);
}

// name:koba04
// from:kyoto


hasOwnPropertyじゃない場合は何もしないし、インデントも浅くなるので慣れれば読みやすいかなーと思ったりしました。慣れれば。。


使っているプロジェクトないかなーと見てみると、enchant.jsのソースでも使われていますね。