Ось коротка і точна відповідь:
У JavaScript кожен об'єкт має купу вбудованих пар ключ-значення, які містять метаінформацію про об'єкт. Коли ви прокручуєте всі пари ключ-значення, використовуючи for...inконструкцію / цикл для об'єкта, ви також переглядаєте ці пари мета-інформація ключ-значення (чого ви точно не хочете).

Використовуючи hasOwnPropery(property) фільтри, ці непотрібні цикли перебирають метаінформацію та безпосередньо перевіряють, є параметр propertyвластивістю користувача в об’єкті чи ні. Під фільтрацією , я маю на увазі, що hasOwnProperty(property)не виглядає, чи propertyіснує в ланцюжку прототипів об'єкта, яка також є метаінформацією.
Він повертає логічне значення true/falseна основі цього.
Ось приклад:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"};
console.log(fruitObject.hasOwnProperty("name"));
console.log(Object.prototype.hasOwnProperty("toString");)
Сподіваюся, це зрозуміло!