Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。
in演算子は他のコレクション内の値を検索するために使用することはできません。配列内に特定の値が存在するかどうかを検査するには、 Array.prototype.includes() を使用してください。 集合の場合は、 Set.prototype.has() を使用してください。
プロパティ名または配列のインデックスを表す文字列式またはシンボルです(シンボルではない場合は、文字列に変換されます)。プライベート要素の識別子である場合もあります。
objectオブジェクト(またはそのプロトタイプチェーン)に、指定された名前 (prop) のプロパティが含まれているかどうかを確認するオブジェクト。
object がオブジェクトでない場合(つまり、プリミティブ型の場合)に発生します。
in 演算子は、オブジェクトまたはそのプロトタイプチェーン内に、文字列またはシンボルプロパティが存在するかどうかの検査を行います。継承されていないプロパティのみを調べる場合は、代わりに Object.hasOwn() を使用してください。
オブジェクトにプロパティが存在しても、その値が undefined である場合があります。したがって、 "x" in obj は obj.x !== undefined とは同等ではありません。プロパティ追加後に in が false を返すようにするには、そのプロパティの値を undefined に設定する代わりに、 delete 演算子を使用してください。
in 演算子を使用して、特定のクラスのプライベートフィールドまたはメソッドがクラスで定義されているかどうかを調べることができます。プロパティが定義されている場合、演算子は true を返し、そうでない場合は false を返します。これは、そのオブジェクトがそのクラスのコンストラクターで作成された場合にのみ true を返すため、「ブランドチェック」と呼ばれています。その後、他のプライベート要素にも安全にアクセスすることができます。
これは特別な構文です。 in 演算子の左辺は式ではなくプロパティ識別子ですが、引用符で囲まれていません(囲むと文字列プロパティとなり、プライベート要素ではなくなるため)。
現在のクラスと無関係なオブジェクトのプライベート要素にアクセスすると、undefinedを返すのではなく TypeError が発生するため、この構文により以下のように短縮できます。
これが次のようになります。
また、一般的に、存在しない可能性のあるプライベート要素にアクセスするためだけにエラーを処理する必要性を避けることができます。
ただし、 in 演算子では、プライベート要素を事前に囲みクラスで宣言することが要求されます。そうしないと、宣言されていないプライベート要素にアクセスしようとした場合と同じ SyntaxError ("Private field '#x' must be declared in an enclosing class") が発生します。
次の例で in 演算子の使用法を示します。
in 演算子の右側には、オブジェクトを指定しなければなりません。例えば、String コンストラクターで作成した文字列は指定できますが、文字列リテラルは指定できません。
delete 演算子で削除されたプロパティについては、in 演算子は false を返します。
undefined を設定しているが削除されていないプロパティについて、in 演算子は true を返します。
in 演算子は、空の配列スロットに対して false を返します。直接アクセスしても undefined が返されます。
これを避けるためには、新しい配列が常に空でない値で埋められるようにするか、配列の終わりを超える位置に書き込まないようにしてください。
in 演算子はプロトタイプチェーン内のプロパティに対して true を返します。オブジェクトを任意のキーと値の組を格納するために使用している場合、これは望ましくない可能性があります。
オブジェクトにキーを保有している場合を調べるには、 Object.hasOwn() を使用することができます。
あるいは、その他のバグを避けるために、 null プロトタイプオブジェクトまたは Map を使用して ages を格納することを検討してください。
下記のコード断片は、オブジェクトが Person コンストラクターで作成されたかを指示する静的関数を示しています。これにより、他のメソッドを安全に実行することができるかどうかを確認できます。
これは、次のケースを防ぐのに役立ちます。
in 演算子を使わずに、オブジェクトがプライベート要素をもってかどうかを調べるには、 try...catch ブロックを使用する必要があります。
また、これをクラスの [Symbol.hasInstance]() メソッドとして実装することもできます。これにより、 instanceof 演算子を使用して同じチェックを実行できます(既定では、オブジェクトのプロトタイプチェーン内の Person.prototype の存在のみを調べます)。
これ以外の例は、プライベート要素とクラスガイドを参照してください。
| ECMAScript® 2027 Language Specification # sec-relational-operators |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年9月8日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.