Оператор in проверяет, существует ли свойство в объекте или его цепочке прототипов. Он возвращает true, если свойство найдено, и false, если нет. Важно: он проверяет наличие свойства, а не его значение.
const user = { name: 'Иван' };
console.log('name' in user); // true
console.log('age' in user); // falseОператор [in] — это способ проверить, есть ли свойство у объекта. Он отличается от других способов проверки и имеет свои особенности.
Проверяет наличие свойства в объекте и его прототипах:
const user = { name: 'Иван' };
console.log('name' in user); // true
console.log('age' in user); // falseconst obj = {
value: undefined,
missing: undefined // На самом деле свойства нет
};
console.log('value' in obj); // true — свойство есть
console.log('missing' in obj); // false — свойства нетconst user = { name: 'Иван', age: 25 };
if ('name' in user) {
console.log('Имя есть'); // Сработает
}
if ('phone' in user) {
console.log('Телефон есть'); // Не сработает
}const obj = {};
// Все объекты имеют унаследованные методы
console.log('toString' in obj); // true
console.log('hasOwnProperty' in obj); // trueconst parent = { inherited: 'value' };
const child = Object.create(parent);
console.log('inherited' in child); // true — через прототипconst user = { name: 'Иван' };
const key = 'name';
console.log(key in user); // trueconst obj = { value: undefined };
// ❌ Не работает правильно
if (obj.value) { /* не сработает */ }
// ✅ Правильно
if ('value' in obj) { /* сработает */ }const arr = [1, 2, 3];
// Проверить, есть ли метод массива
if ('push' in arr) {
console.log('Можно использовать push'); // Сработает
}const obj = { name: 'Иван' };
// ❌ Проверяет только собственные свойства
console.log(obj.hasOwnProperty('toString')); // false
// ✅ Проверяет всё, включая унаследованное
console.log('toString' in obj); // trueconst obj = { value: undefined };
// ❌ Не различает undefined и отсутствие свойства
if (obj.value === undefined) { /* не различает случаи */ }
// ✅ Правильно проверяет наличие
if ('value' in obj) { /* точно знает, есть свойство или нет */ }Оператор [in] удобен, когда нужно точно знать, есть ли свойство у объекта, независимо от его значения.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪