Оператор in
Оператор in у JavaScript використовується для перевірки,
чи існує вказана властивість в об'єкті або індекс у масиві.
Це один з базових, але часто неправильно зрозумілих операторів. Розберемо детально.
Синтаксис
propName in objectДе:
propName- це рядок (або вираз, який приводиться до рядка),object- це об'єкт, масив або інша структура з ключами.
Приклад з об'єктом
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:
const obj = { a: undefined };
console.log('a' in obj); // true
console.log(obj.a === undefined); // trueТобто
inперевіряє наявність ключа, а не значення.
Приклад з масивом
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 перевіряє не тільки власні властивості,
а й успадковані через прототип.
const person = { name: 'Tim' };
console.log('toString' in person); // true, тому що успадковано від Object.prototypeЩоб перевірити тільки власні властивості, використовуй
obj.hasOwnProperty('key'):javascriptperson.hasOwnProperty('toString'); // false person.hasOwnProperty('name'); // true
Приклад з класом
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 викине помилку:
'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 |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.