2 つの方法ですが、少し異なります
1、演算子内
var obj = {name:'jack' };
alert('name' in obj) // --> true
alert('toString' in obj);
プロトタイプ チェーン上の name と toString の両方が検出され、true が返されることがわかります。
2、hasOwnProperty メソッド
obj.hasOwnProperty('name') // --> true
obj.hasOwnProperty('toString'); // false
プロトタイプ チェーンで継承されたプロパティは hasOwnProperty によって検出できず、false を返します。
in はプロトタイプチェーンのプロパティを検出できますが、for in は通常は検出できないことに注意してください。
もちろん、プロトタイプを書き直した後、for in は IE9/Firefox/Safari/Chrome/Opera で表示されます。参照:
for の欠陥