Разница между методами in и hasOwnProperty при проверке ключей в JavaScript заключается в том, что оператор in проверяет всю цепочку прототипов объекта, а метод hasOwnProperty() анализирует только сам объект, не обращаясь к прототипам. 15
Оператор in возвращает true для свойств, которые унаследованы от цепочки прототипов объекта. 5 Метод hasOwnProperty() возвращает true только для свойств, которые определены непосредственно на самом объекте-инстанце, а не унаследованные свойства. 5
Таким образом, hasOwnProperty() подойдёт, когда необходимо ограничить проверку лишь самим объектом, не затрагивая его прототипы. 1 Оператор in будет уместен в случаях, когда требуется учитывать унаследованные свойства или динамические имена свойств. 1