From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../javascript/reference/operators/in/index.html | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 files/ja/web/javascript/reference/operators/in/index.html (limited to 'files/ja/web/javascript/reference/operators/in') diff --git a/files/ja/web/javascript/reference/operators/in/index.html b/files/ja/web/javascript/reference/operators/in/index.html new file mode 100644 index 0000000000..ac6c61dc62 --- /dev/null +++ b/files/ja/web/javascript/reference/operators/in/index.html @@ -0,0 +1,141 @@ +--- +title: in +slug: Web/JavaScript/Reference/Operators/in +tags: + - JavaScript + - Language feature + - Operator + - Relational Operators +translation_of: Web/JavaScript/Reference/Operators/in +--- +
{{jsSidebar("Operators")}}
+ +

in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。

+ +
{{EmbedInteractiveExample("pages/js/expressions-inoperator.html")}}
+ + + +

構文

+ +
prop in object
+ +

引数

+ +
+
prop
+
プロパティ名または配列のインデックスを表す文字列式またはシンボルです(シンボルではない場合は、文字列に強制変換されます)。
+
+ +
+
object
+
オブジェクト(またはそのプロトタイプチェーン)に、指定された名前(prop)のプロパティが含まれているかどうかを確認するオブジェクト。
+
+ +

+ +

基本的な使い方

+ +

次の例で in 演算子の使用法を示します。

+ +
// Arrays
+let trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+0 in trees        // true を返す
+3 in trees        // true を返す
+6 in trees        // false を返す
+'bay' in trees    // false を返す (インデックスの指す値ではなく、インデックスの数字を指定しなければならない)
+'length' in trees // true を返す (length は Array のプロパティ)
+Symbol.iterator in trees // true を返す (配列は反復可能。ES2015 以上で動作する)
+
+// 定義済みオブジェクト
+'PI' in Math          // true を返す
+
+// ユーザー定義オブジェクト
+let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+'make' in mycar  // true を返す
+'model' in mycar // true を返す
+
+ +

in 演算子の右側には、オブジェクトを指定しなければなりません。例えば、String コンストラクタで作成した文字列は指定できますが、文字列リテラルは指定できません。

+ +
let color1 = new String('green');
+'length' in color1 // true を返す
+
+let color2 = 'coral';
+// エラーが発生 (color2 は String オブジェクトではありません)
+'length' in color2
+
+ +

削除済みあるいは未定義状態のプロパティへの in の使用

+ +

delete 演算子で削除されたプロパティについて、in 演算子は false を返します。

+ +
let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+delete mycar.make;
+'make' in mycar;  // false を返す
+
+let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
+delete trees[3];
+3 in trees; // false を返す
+
+ +

{{jsxref("Global_Objects/undefined", "undefined")}} を設定しているが削除されていないプロパティについて、in 演算子は true を返します。

+ +
let mycar = {make: 'Honda', model: 'Accord', year: 1998};
+mycar.make = undefined;
+'make' in mycar;  // true を返す
+
+ +
let trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
+trees[3] = undefined;
+3 in trees; // true を返す
+
+ +

in 演算子は、空の配列スロットに対して false を返します。直接アクセスしても undefined が返されます。

+ +
let empties = new Array(3)
+empties[2] // undefined を返す
+2 in empties  // false を返す
+
+ +

これを避けるためには、新しい配列が常に空でない値で埋められるようにするか、配列の終わりを超えてインデックスに書き込まないようにします。

+ +
let empties = new Array(3).fill(undefined)
+2 in empties  // true を返す
+
+ +

継承されたプロパティ

+ +

in 演算子は、プロトタイプチェーンのプロパティに対して true を返します。(継承されていないプロパティのみをチェックする場合は、代わりに {{jsxref("Object.prototype.hasOwnProperty()")}} を使用してください)。

+ +
'toString' in {}  // returns true
+
+ +

仕様

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}
+ +

ブラウザー実装状況

+ + + +

{{Compat("javascript.operators.in")}}

+ +

関連情報

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