2012-02-22 13 views
32
If(somevar.hasOwnProperty('someProperty')) { 
// do something(); 
} else { 
// do sometingelse(); 
} 

hasOwnProperty('someProperty')の正しい使用法/説明は何ですか?Javascript hasOwnPropertyのプロパティは何ですか?

なぜsomevar.somePropertyを使用して、オブジェクトsomevarに名前がsomePropertyのプロパティが含まれているかどうかを確認できないのはなぜですか?

この場合、プロパティとは何ですか?

このjavascriptでどのようなプロパティがチェックされますか?

+2

http://stackoverflow.com/questions/2600085/hasownproperty-in-javascript –

+0

私はこの質問をしたとき、私はそれはいくつかのHTMLを確認機能だと思いました。今私は、そのオブジェクトまたはメソッド内の '変数'のjavascriptオブジェクトまたはメソッドをチェックしています。 thnx! – FLY

+0

がhttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty –

答えて

61

hasOwnPropertyは、呼び出し元のオブジェクトに引数の名前を持つプロパティがあるかどうかを示すブール値を返します。たとえば:

var x = { 
    y: 10 
}; 
console.log(x.hasOwnProperty("y")); //true 
console.log(x.hasOwnProperty("z")); //false 

しかし、それはオブジェクトのプロトタイプチェーンを見ていません。

for...in構成のオブジェクトのプロパティを列挙するときに使用すると便利です。

詳しくはES5 specificationをご覧になるのが良いでしょう。

+3

プロトタイプチェーンのボーナスポイント。まだオブジェクトに呼び出されていないときの呼び出しを把握しようとしています...そのウィンドウではありません –

+0

@KristofferSHansen - 私はそれも疑問に思っていましたが、質問が編集されてオブジェクトに呼び出されています。そうでない場合は、エラーがスローされます。 –

+0

私はものを変更すると思います。しかし、Chromeのコンソールから実行するとエラーは発生しません。 –

7

ことが確認されます。

は、オブジェクトが指定された名前

を持つプロパティを持っていそうでない場合は、オブジェクトがfalse、指定された名前のプロパティがある場合hasOwnPropertyメソッドがtrueを返すかどうかを示すブール値を返します。 。このメソッドは、プロパティがオブジェクトのプロトタイプチェーンに存在するかどうかをチェックしません。プロパティはオブジェクト自体のメンバでなければなりません。

例:

var s = new String("Sample"); 
document.write(s.hasOwnProperty("split"));      //false 
document.write(String.prototype.hasOwnProperty("split"));   //true 
+0

yのを見て持っている - ?1 /私は間違って理解しているのですか? –

+1

あなたの最初の答えが短く全く統一されていない文章だったので、私は-1を与えました。そしてそれはやや長く、やや一貫していますが、完全に不正確な文に更新されました。 –

+0

@ amnotiam-しかし、私はそれがはっきりとはっきりとしていると思う...私のインターネットの問題は私がもっと..........投稿することができないので –

0

それchecks if an object has a property。私が知る限り、それはif(obj.prop)と同じように動作します。

+3

'obj.prop'がプロトタイプチェーンに続き、' hasOwnProperty'は –

+3

ではありません。問題は 'prop'が偽の値を持つときです。 'if(obj.prop)'が 'false'の間に' if(obj.hasOwnProperty( 'prop')) 'は' true'になります。 –

1

hasOwnPropertyは文字列の引数をとる通常のJavaScript関数です。それはSOMEVAR機能を確認し、あなたのケースのsomevar.hasOwnProperty( 'someProperty')で

は、それが真と偽

を返す,, someproperyを持っているか、いないと言う

function somevar() { 
    this.someProperty= "Generic"; 
    } 

function welcomeMessage() 
{ 
    var somevar1= new somevar(); 
     if(somevar1.hasOwnProperty("name")) 
{ 
alert(somevar1.hasOwnProperty("name"));// it will return true 
} 
} 
1

あなたはobject.hasOwnProperty(を使用

オブジェクト自身のを持つことができます - オブジェクトがある場合可算プロパティPを決定するためのp) prototypeでは、オブジェクトのすべてのインスタンスに 'default'メソッドと属性が割り当てられます。 hasOwnPropertyは、コンストラクターで明示的に設定されたプロパティー、またはあとでインスタンスに追加されたプロパティーに対してのみtrueを返します。 Pは、pは、プロパティ名の文字列に評価される場合、(P instanceofのオブジェクト)場合に使用、目的のために、どこでも、すべてで定義されているかどうかを決定する

。例えば

は、デフォルトですべてのオブジェクトは、「のtoString」メソッドを持っているが、それはhasOwnPropertyをに表示されません。

0

私はまた、オブジェクトが指定されたプロパティを持っているかどうかをチェックするためにブール値を返すこの単純なobject-hasOwnProperty再利用可能なコンポーネントを書きました。実際のユースケースの動作をよりよく理解するのに役立つ2つのサンプルと3つのテストがあります。

例:

hasOwnProperty({foo: 'bar'}, 'foo') // => true 
hasOwnProperty({foo: 'bar'}, 'bar') // => false 

テスト済みユースケース:

hasOwnProperty() should return false as given object do not contain key `bar` 
hasOwnProperty() should return true as given object contains key `foo` 
hasOwnProperty() should return false if key is null 

ここで、それがどのように働くか:ここで

function hasOwnProperty(obj: {}, prop: string|number): boolean { 
    return Object.prototype.hasOwnProperty.call(obj, prop); 
}; 
3

が短く、正確な答えは:JavaScriptで

、すべてのオブジェクトはパンがありますオブジェクトに関するメタ情報を持つ組込みのキーと値のペア。このメタ情報キーと値のペアをループしているオブジェクトに対して、for...in構造体/ループを使用してすべてのキーと値のペアをループすると(あなたは間違いなく望みません)。 hasOwnPropery(property)フィルタアウトこれらの不要なメタ情報をループと直接ユーザオブジェクト内かどうかプロパティを与えられることがパラメータpropertyあるチェックを使用

enter image description here

によってフィルタアウト、私が意味する、propertyはメタ情報別名オブジェクトのプロトタイプチェーン内に存在する、場合hasOwnProperty(property)は見ていないこと。

それはそれに基づいてブールtrue/falseを返します。ここで

は一例です:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; 
 
console.log(fruitObject.hasOwnProperty("name")); //true 
 
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

私はそれを明確に願っています!

関連する問題