For inherited properties, in will return true. hasOwnProperty, as the name implies, will check if a property is owned by itself, and ignores the inherited properties.
Let's reuse the person object from the previous example. Since it's a JavaScript object which has built-in properties such as constructor, __proto__, the following check return true:
'constructor' in person; 
'__proto__' in person; 
'toString' in person; 
 
While hasOwnProperty returns false when checking against these properties and methods:
person.hasOwnProperty('constructor'); 
person.hasOwnProperty('__proto__'); 
person.hasOwnProperty('toString'); 
 
For the get and set methods of a class, hasOwnProperty also returns false.
For example, we have a simple class representing triangles:
class Triangle {
    get vertices() {
        return 3;
    }
}
const triangle = new Triangle();
 
Despite the fact that vertices is the property of triangle:
triangle.vertices; 
'vertices' in triangle; 
 
hasOwnProperty still ignores it:
triangle.hasOwnProperty('vertices');