web-dev-qa-db-ja.com

Javascript hasOwnPropertyのプロパティとは?

_if (someVar.hasOwnProperty('someProperty') ) {
 // do something();
} else {
 // do somethingElse();
}
_

hasOwnProperty('someProperty')の正しい使用/説明は何ですか?

オブジェクトsomeVarsomePropertyという名前のプロパティが含まれているかどうかを確認するために、単に_someVar.someProperty_を使用できないのはなぜですか?

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

このjavascriptはどのプロパティをチェックしますか?

58
FLY

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

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

ただし、オブジェクトのプロトタイプチェーンは参照しません。

for...inコンストラクトを使用してオブジェクトのプロパティを列挙するときに使用すると便利です。

完全な詳細を確認したい場合、 ES5仕様 は、いつものように見るのに適した場所です。

102
James Allardice

短く正確な答えを次に示します。

JavaScriptでは、すべてのオブジェクトに、オブジェクトに関するメタ情報を持つ組み込みのキーと値のペアがあります。オブジェクトに対して_for...in_コンストラクト/ループを使用してすべてのキーと値のペアをループすると、このメタ情報のキーと値のペアもループします(これは望ましくありません)。

enter image description here

hasOwnPropery(property)filters-outを使用して、メタ情報を介したこれらの不必要なループと、パラメータpropertyがオブジェクト内のユーザー指定のプロパティかどうか。 filters-out、つまり、hasOwnProperty(property)は、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_

私はそれが明確であることを願っています!

16
Om Prakash Sao

それはチェックします:

オブジェクトに指定された名前のプロパティがあるかどうかを示すブール値を返します

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

例:

var s = new String("Sample");
document.write(s.hasOwnProperty("split"));                        //false 
document.write(String.prototype.hasOwnProperty("split"));         //true
11
Pranay Rana

概要:

hasOwnProperty()は、任意のオブジェクトで呼び出すことができ、入力として文字列を受け取る関数です。プロパティがオブジェクトにある場合はtrueであるブール値を返し、そうでない場合はfalseを返します。 hasOwnProperty()は_Object.prototype_にあるため、どのオブジェクトでも使用できます。

例:

_function Person(name) {
  this.name = name;
}

Person.prototype.age = 25;

const willem = new Person('willem');

console.log(willem.name); // property found on object
console.log(willem.age); // property found on prototype

console.log(willem.hasOwnProperty('name')); // name is on the object itself
console.log(willem.hasOwnProperty('age')); // age is not on the object itself_

この例では、新しいPersonオブジェクトが作成されます。各Personには、コンストラクターで初期化される独自の名前があります。ただし、年齢はオブジェクト上ではなく、オブジェクトのプロトタイプ上にあります。したがって、hasOwnProperty()は、名前にtrueを返し、年齢にfalseを返します。

実用的なアプリケーション:

hasOwnProperty()は、_for in_ループを使用してオブジェクトをループするときに非常に役立ちます。プロパティがプロトタイプではなくオブジェクト自体からのものであるかどうかを確認できます。例えば:

_function Person(name, city) {
  this.name = name;
  this.city = city;
}

Person.prototype.age = 25;

const willem = new Person('Willem', 'Groningen');

for (let trait in willem) {
  console.log(trait, willem[trait]); // this loop through all properties including the prototype
}

console.log('\n');

for (let trait in willem) {
  if (willem.hasOwnProperty(trait)) { // this loops only through 'own' properties of the object
    console.log(trait, willem[trait]);
  }
}_
6

hasOwnPropertyは、文字列の引数を取る通常のJavaScript関数です。

あなたの場合、somevar.hasOwnProperty( 'someProperty')は、somevar関数がsomeproperyを持っているかどうかをチェックし、trueとfalseを返します。

いう

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

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

Object.hasOwnProperty(p)を使用して、オブジェクトにenumerableプロパティがあるかどうかを判断しますp-

オブジェクトは、「デフォルト」のメソッドと属性がオブジェクトのすべてのインスタンスに割り当てられる独自のプロトタイプを持つことができます。 hasOwnPropertyは、コンストラクターで具体的に設定されたプロパティ、または後でインスタンスに追加されたプロパティに対してのみtrueを返します。

オブジェクトに対してpがどこでも定義されているかどうかを判断するには、if(p instanceof object)を使用します。pはプロパティ名文字列に評価されます。

たとえば、デフォルトではすべてのオブジェクトに「toString」メソッドがありますが、hasOwnPropertyには表示されません。

2
kennebec

それ オブジェクトにプロパティがあるかどうかをチェックする 。私の知る限り、if(obj.prop)と同じように機能します。

0
visualidiot