A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/in below:

in æ¼”ç®—å - JavaScript | MDN

in 演算子

Baseline Widely available

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

試してみましょう
const car = { make: "Honda", model: "Accord", year: 1998 };

console.log("make" in car);
// Expected output: true

delete car.make;
if ("make" in car === false) {
  car.make = "Suzuki";
}

console.log(car.make);
// Expected output: "Suzuki"
構文 引数
prop

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

object

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

例 基本的な使い方

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

// 配列
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 を返す

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 を返します。(継承されていないプロパティのみをチェックする場合は、代わりに Object.prototype.hasOwnProperty() を使用してください)。

"toString" in {}; // true を返す
プライベートフィールドとメソッド

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

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

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

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 を返す
仕様書 ブラウザーの互換性 関連情報

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4