--- title: in slug: Web/JavaScript/Reference/Operators/in tags: - JavaScript - Language feature - Operator - Relational Operators translation_of: Web/JavaScript/Reference/Operators/in ---
in
演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true
を返します。
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")}}
for...in
delete