Hack Frontend Community

Разница между оператором in и методом hasOwnProperty() в JavaScript

В JavaScript у нас есть два основных способа проверить, есть ли у объекта определённое свойство:

  1. in — оператор, проверяющий всё (включая унаследованные свойства).
  2. .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, если нужно проверить всё, включая унаследованное.