Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

in 演算子

BaselineWidely available

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

試してみましょう

const car = { make: "Honda", model: "Accord", year: 1998 };console.log("make" in car);// Expected output: truedelete car.make;if ("make" in car === false) {  car.make = "Suzuki";}console.log(car.make);// Expected output: "Suzuki"

構文

js
prop in object;

引数

prop

プロパティ名または配列のインデックスを表す文字列式またはシンボルです(シンボルではない場合は、文字列に強制変換されます)。プライベート要素の識別子である場合もあります。

object

オブジェクト(またはそのプロトタイプチェーン)に、指定された名前(prop)のプロパティが含まれているかどうかを確認するオブジェクト。

基本的な使い方

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

js
// 配列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 コンストラクターで作成した文字列は指定できますが、文字列リテラルは指定できません。

js
let color1 = new String("green");"length" in color1; // true を返すlet color2 = "coral";// エラーが発生 (color2 は String オブジェクトではない)"length" in color2;

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

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

js
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 を返す

undefined を設定しているが削除されていないプロパティについて、in 演算子は true を返します。

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

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

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

これを避けるためには、新しい配列が常に空でない値で埋められるようにするか、配列の終わりを超える位置に書き込まないようにしてください。

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

継承されたプロパティ

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

js
"toString" in {}; // true を返す

プライベートフィールドとメソッド

in 演算子を使用して、特定のクラスのプライベートフィールドまたはメソッドがクラスで定義されているかどうかを調べることができます。プロパティが定義されている場合、演算子はtrue を返し、そうでない場合はfalse を返します。これは、そのオブジェクトがそのクラスのコンストラクターで作成された場合にのみtrue を返すため、「ブランドチェック」と呼ばれています。その後、他のプライベート要素にも安全にアクセスすることができます。

メモ:クラスの定義されていないプライベートフィールドやメソッドにアクセスしようとすると、コードでthrow が発生します。存在しない可能性があるプライベート要素をin 演算子でチェックすると、try/catch を使用するより簡潔にすることができます。

以下のコードは、指定されたクラスが特定のプライベートメソッドやフィールドを持っているかどうかをチェックする静的関数です。

js
class ClassWithPrivateFeatures {  #a;  #b = null;  #c() {}  get #d() {}  static f(o) {    return #a in o && #b in o && #c in o && #d in o;  }}ClassWithPrivateFeatures.f(new ClassWithPrivateFeatures()); // true を返すClassWithPrivateFeatures.f({}); // false を返す

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-relational-operators

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp