From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../object/hasownproperty/index.html | 146 +++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html (limited to 'files/ja/web/javascript/reference/global_objects/object/hasownproperty') diff --git a/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html b/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html new file mode 100644 index 0000000000..177ea1a986 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/object/hasownproperty/index.html @@ -0,0 +1,146 @@ +--- +title: Object.prototype.hasOwnProperty() +slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +tags: + - JavaScript + - Method + - Object + - Prototype + - hasOwnProperty + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +--- +
{{JSRef}}
+ +

hasOwnProperty() メソッドは、オブジェクト自身が(継承されていない)指定されたプロパティを持っているかどうかを示す真偽値を返します。

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}}
+ + + +

構文

+ +
obj.hasOwnProperty(prop)
+ +

引数

+ +
+
prop
+
テストするプロパティの名前の {{jsxref("String")}} または {{Glossary("Symbol")}} 。
+
+ +

返値

+ +

{{jsxref("Boolean")}} で、オブジェクトが指定されたプロパティを自身のプロパティとして持っているかどうかを示す

+ +

解説

+ +

{{jsxref("Object")}} のすべての子孫は hasOwnProperty メソッドを継承しています。このメソッドはあるオブジェクトが指定されたプロパティを、そのオブジェクトの直接のプロパティとして持っているかどうかを特定するのに使うことができます。 {{jsxref("Operators/in", "in")}} 演算子とは異なり、このメソッドはオブジェクトのプロトタイプチェーンをたどってチェックしません。 {{jsxref("Object")}} が {{jsxref("Array")}} の場合、 hasOwnProperty メソッドはある添字が存在するかどうかを調べることができます。

+ +

+ +

hasOwnProperty はプロパティの値が null または undefined であっても true を返します。

+ +
o = new Object();
+o.propOne = null;
+o.hasOwnProperty('propOne');   // true を返す
+o.propTwo = undefined;
+o.hasOwnProperty('propTwo');   // true を返す
+
+ +

+ +

hasOwnProperty を使ってプロパティの存在を調べる

+ +

オブジェクト oprop という名前のプロパティを持っているかどうかを特定する例を以下に示します。

+ +
o = new Object();
+o.hasOwnProperty('prop');   // false を返す
+o.prop = 'exists';
+o.hasOwnProperty('prop');   // true を返す
+
+ +

直接のプロパティと継承されたプロパティ

+ +

以下の例では、直接のプロパティとプロトタイプチェーンを通じて継承されたプロパティを区別します。

+ +
o = new Object();
+o.prop = 'exists';
+o.hasOwnProperty('prop');             // true を返す
+o.hasOwnProperty('toString');         // false を返す
+o.hasOwnProperty('hasOwnProperty');   // false を返す
+
+ +

オブジェクトのプロパティの反復処理

+ +

以下の例では、継承されたプロパティを除いてオブジェクトのプロパティを反復処理する方法を示します。なお、 {{jsxref("Statements/for...in", "for...in")}} ループですでに列挙可能なアイテムのみが反復処理されるので、 hasOwnProperty 自体は列挙可能なアイテムに厳密に限定されているため、ループ内に列挙できないプロパティが見られないことに基づいて想定するべきではありません ({{jsxref("Object.getOwnPropertyNames()")}} のように)。

+ +
var buz = {
+  fog: 'stack'
+};
+
+for (var name in buz) {
+  if (buz.hasOwnProperty(name)) {
+    console.log('this is fog (' +
+      name + ') for sure. Value: ' + buz[name]);
+  }
+  else {
+    console.log(name); // toString or something else
+  }
+}
+
+ +

プロパティ名としての hasOwnProperty の使用

+ +

JavaScript は hasOwnProperty というプロパティ名を保護していません。したがって、オブジェクトがこの名前のプロパティを持っている場合が存在すれば、正しい結果を得るためには外部の hasOwnProperty を使用する必要があります。

+ +
var foo = {
+  hasOwnProperty: function() {
+    return false;
+  },
+  bar: 'Here be dragons'
+};
+
+foo.hasOwnProperty('bar'); // 常に false を返す
+
+// 別な Object の hasOwnProperty 使用して、
+// this を foo に設定して呼び出す
+({}).hasOwnProperty.call(foo, 'bar'); // true
+
+// この目的では、 Object プロトタイプの hasOwnProperty プロパティを
+// 使用することもできます。
+Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
+
+ +

なお、後者の場合は新しくオブジェクトを生成しません。

+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.Object.hasOwnProperty")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf