in
演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true
を返します。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
構文
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 を返す
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 {} // returns true
仕様
ブラウザー実装状況
BCD tables only load in the browser