Разница между оператором in и методом hasOwnProperty() в JavaScript
В JavaScript у нас есть два основных способа проверить, есть ли у объекта определённое свойство:
in— оператор, проверяющий всё (включая унаследованные свойства)..hasOwnProperty()— метод объекта, проверяющий только собственные свойства.
Сравнение в таблице
| Характеристика | in | .hasOwnProperty() |
|---|---|---|
| Проверяет включая прототип | Да | Нет, только собственные |
| Проверяет только собственные свойства | Нет | Да |
| Может использоваться с прототипами | Да | Да |
Может вызвать ошибку на undefined объекте | Да (если не проверили объект) | Можно вызвать только у объекта |
Пример использования
in — проверка включая прототипы
const obj = { name: "John" };
console.log("name" in obj); // true
console.log("toString" in obj); // true (унаследовано от Object.prototype)
hasOwnProperty() — проверка только своих свойств
console.log(obj.hasOwnProperty("name")); // true
console.log(obj.hasOwnProperty("toString")); // false (унаследовано)
Вывод:
- Используйте
hasOwnProperty()для точной проверки собственных свойств. - Используйте
in, если нужно проверить всё, включая унаследованное.