Разница между оператором 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
, если нужно проверить всё, включая унаследованное.