Skip to main content

Оператор in

Оператор in у JavaScript використовується для перевірки, чи існує вказана властивість в об'єкті або індекс у масиві.

Це один з базових, але часто неправильно зрозумілих операторів. Розберемо детально.


Синтаксис

javascript
propName in object

Де:

  • propName - це рядок (або вираз, який приводиться до рядка),
  • object - це об'єкт, масив або інша структура з ключами.

Приклад з об'єктом

javascript
const user = { name: 'Tim', age: 25 }; console.log('name' in user); // true console.log('age' in user); // true console.log('email' in user); // false

Оператор in повертає true, якщо властивість існує в об'єкті (навіть якщо значення undefined).


Особливості

Навіть якщо значення властивості дорівнює undefined, in все одно поверне true:

javascript
const obj = { a: undefined }; console.log('a' in obj); // true console.log(obj.a === undefined); // true

Тобто in перевіряє наявність ключа, а не значення.


Приклад з масивом

javascript
const arr = ['a', 'b', 'c']; console.log(0 in arr); // true - індекс 0 існує console.log(2 in arr); // true - індекс 2 існує console.log(3 in arr); // false - такого індексу немає

JS сприймає індекси масиву як властивості: arr[0] еквівалентно arr['0'].


Приклад з успадкуванням (через прототип)

Оператор in перевіряє не тільки власні властивості, а й успадковані через прототип.

javascript
const person = { name: 'Tim' }; console.log('toString' in person); // true, тому що успадковано від Object.prototype

Щоб перевірити тільки власні властивості, використовуй obj.hasOwnProperty('key'):

javascript
person.hasOwnProperty('toString'); // false person.hasOwnProperty('name'); // true

Приклад з класом

javascript
class User { constructor() { this.name = 'Alex'; } } User.prototype.age = 25; const u = new User(); console.log('name' in u); // true (власна властивість) console.log('age' in u); // true (успадковано від прототипу)

Помилка при використанні з не-об'єктом

Якщо права частина не є об'єктом (і не може бути приведена до нього), JS викине помилку:

javascript
'length' in null; // TypeError 'length' in undefined; // TypeError

Тому перед перевіркою переконайся, що змінна не null і не undefined.


Підсумок

ПеревіряєНаявність ключа (властивості / індексу)
Працює зОб'єктами, масивами, функціями
Повертаєtrue / false
Враховує прототипТак
Перевіряє значенняНі

Приклади порівняння

ПеревіркаРезультатПояснення
'name' in { name: 'Tim' }trueключ існує
'email' in { name: 'Tim' }falseключа немає
0 in ['a', 'b']trueіндекс 0 є
2 in ['a', 'b']falseіндексу 2 немає
'toString' in {}trueуспадковано від Object.prototype

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.