2011-09-28 14 views
7

もう一方を使用する必要がありますか?それらをすべて一緒に使っていますか?ありがとう。 objは、それが単にプロトタイプから継承されます場合でも、全くpropという名前のプロパティを持っているかどうかをobjとobj.hasOwnProperty(prop)とobj [prop]のpropの違いは?

+0

[オペレータにMDN(https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/in)、[MDN hasOwnPropertyを( https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty)、[MDNメンバー演算子](https://developer.mozilla.org/ja/JavaScript/Reference/Operators/Member_Operators) – user113716

+0

更新されたリンク:[MDN 'in'演算子](https://developer.mozilla.org/ja/JavaScript/Reference/Operators/in)。 [MDN 'hasOwnProperty'](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Object/HasOwnProperty)。 [MDNメンバー演算子、ブラケット記法](https://developer.mozilla.org/ja/JavaScript/Reference/Operators/Member_Operators#Bracket_notation) –

答えて

19
  • prop in objチェック。 obj自体propという名前のプロパティを保持しているかどうかを

  • obj.hasOwnProperty(prop)チェック。プロトタイプから継承したプロパティは無視されます。

  • obj[prop]は、propプロパティの値を取得します。 1あなたは

    を達成しようとしている何のために適切な方

使用:3つのすべてのケースでは、propは文字列でなければなりません。

console.log("legs" in dog); // TRUE - due to JS inheritance and since 'in' key looks into inherited prototypes 
console.log(dog.hasOwnProperty("legs")); // FALSE 
console.log(dog.hasOwnProperty("barks")); //TRUE 

プリント

true 
false 
true 

注1つのより多くの事::犬が持っていた場合は、「足になりました、これはそれを意味

var animal = {"legs": 4}; 
var dog = {"barks" : true}; 
dog.__proto__ = animal; // JS inheritance (dog inherits from animal) 

:ちょうどこのために例を与えるために

+0

obj.propとobj ['との間に違いがあるかどうか教えてください。 prop ']? SLaks –

0

"プロパティは5を言うことができます。(hhmm spooky i know)ので、 'in'演算子(犬の" legs ")は" legs "プロパティw hichは犬オブジェクトで宣言され、動物オブジェクトからの継承された "脚"には宣言されません。例えば:

var animal = {"legs": 4}; 
var dog1 = {"barks": true}; 
var dog2 = {"barks": true, "legs": 5}; 
dog1.__proto__ = animal; 
dog2.__proto__ = animal; 

console.log(dog1.legs); 
console.log(dog2.legs); 
console.log("legs" in dog2) // 'in' refer to the un-inherited "legs" of dog2 

プリント

4 
5 
true 
関連する問題