Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Оператор in». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Оператор `in`** у JavaScript використовується для перевірки, **чи існує вказана властивість в об'єкті або індекс у масиві**. **Ключове:** `in` перевіряє наявність ключа (враховуючи успадковані через прототип), а не значення - навіть якщо значення `undefined`, результат буде `true`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняОператор `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` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.