配列の走査について

明けましておめでとうございます。
今年は昨年以上にがんばります。


javascriptのfor inについて
JavaScript の配列と連想配列の違い - IT戦記
amachangのblog読んでると本当参考になります。

for in はオブジェクトのプロパティーすべて走査するらしい。
だから

Array.prototype.ext = function () {
    return 'ext';
};

var hairetu = ['a','b','c'];
for (var i in hairetu) {
    console.log(hairetu[i]);  // a, b, c, function() が表示される
}

のように、prototypeに関数やオブジェクトを追加しているとfor in の場合走査の対象になってしまうので予期せぬ動作をすることになる。

これは配列だけでなく例えば

Object.prototype.ext = function() {
    return 'ext';
};

var obj = {
    a : 'a',
    b : 'b',
    c : 'c'
};

for (var i in obj) {
    console.log(obj[i]);  // a, b, c, function() が表示される
};

のように連想配列でもObjectのprototypeを拡張している場合は同様の動作をしてしまう。
もっとも、Objectのprototypeはよっぽどの事がない限り拡張するべきではないような気がします。