for-inループのお作法

結論は、下記である。

  • プロトタイプ連鎖から来たプロパティを除外するために、メソッドhasOwnProperty()を使用する

まず、プロトタイプとは何か。
これは「全ての関数オブジェクトが保持するprototypeというプロパティ」のことだ。

で、あるオブジェクトのプロパティを評価した際、仮に何らかの値が返ってきたとしても、そのオブジェクト自身がプロパティを持っているのか、そのオブジェクトのプロトタイプが持っているのか、判断することができない。

そこで利用するのがhasOwnProperty()メソッドである。
このメソッドは、
引数で与えた文字列に一致するプロパティを、そのオブジェクト自身が持っているかどうかを判断してくれる。

つまり、for-inループを使用する際は、hasOwnProperty()を利用することで、プロトタイプ連鎖からくるオブジェクトを除くのだ。