JSオブジェクトがある属性を持っているかどうかをどう判断しますか?


JSオブジェクトはある属性を持っていますか?
二つの方式ですが、ちょっと違います。
1,in演算子

var obj = {name:'jack'};
alert('name' in obj); // --> true
alert('toString' in obj); // --> true
nameでも、元のチェーン上のtoStringでも、trueに戻ることが検出されます。
 2,hasOwnProperty方法

var obj = {name:'jack'};
obj.hasOwnProperty('name'); // --> true
obj.hasOwnProperty('toString'); // --> false
プロトタイプチェーン上で継承された属性はハスOwnPropertyでは検出できず、falseに戻ります。
注意したいのは、inはプロトタイプチェーンの属性を検出することができますが、for inは通常はできません。
もちろんプロトタイプを書き換えたらfor inはIE 9/Firefox/Safari/Chrome/Operaの下で見られます。見ました。for inの欠陥
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。