in is a simple way to check if a property name exists on an object, including what it inherits, and for arrays it checks if an index is there.
in は「この名前の入れ物が、オブジェクトの中か、親ゆずりのどこかにある?」を一瞬で確かめる道具で、配列では番号の有無を調べる、シンプルな存在チェック用のキーワードです。
in演算子は、オブジェクトの中に「その名前の入れ物(プロパティ)」があるかどうかを、true / falseで教えてくれる道具です。
「このオブジェクトに、このキーってある?」を手早くチェックできます。
使い方は、とてもシンプルで次の形です。
JavaScript
'キー名' in オブジェクト
例えば、次のようなオブジェクトがあるとします。
JavaScript
const user = { name: 'Taro', age: 20 };
console.log('name' in user); // true
console.log('age' in user); // true
console.log('email' in user); // false(無いので false)
ポイントとして、継承されたプロパティも true になる場合があります。
JavaScript のオブジェクトは「親オブジェクト」から引き継いだ性質(プロトタイプ)を持っていて、そこにキーがあっても in は true にします。
JavaScript
console.log('toString' in user); // true(親オブジェクトが持っている)
「自分が持っているプロパティだけ見たい」という場合には、こう書くと確実です。
JavaScript
const user = Object.create({ shared: true });
user.name = 'Taro';
console.log('shared' in user); // true(親のものも拾う)
console.log(Object.hasOwn(user, 'shared')); // false(自分のものかどうか)
配列で in を使った場合、“値” ではなく “番号(インデックス)” があるかどうかを調べます。
JavaScript
const data = ['A', 'B'];
console.log(0 in data); // true(0番がある)
console.log(2 in data); // false(2番はない)
「指定した値が入っているか」を調べたい場合は、次のほうが自然です。
JavaScript
data.includes('B'); // true
in は キーの存在チェックincludes がわかりやすいこれだけ押さえれば、in の基本は OK です。