JavaScript

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 は「この名前の入れ物が、オブジェクトの中か、親ゆずりのどこかにある?」を一瞬で確かめる道具で、配列では番号の有無を調べる、シンプルな存在チェック用のキーワードです。

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 の基本は OK です。