hasOwnProperty vs in
The in operator and hasOwnProperty function are the common ways to check if an objects contains a particular key.
const person = {
name: 'Foo',
};
'name' in person; // true
person.hasOwnProperty('name'); // trueDifferences
For inherited properties,
inwill returntrue.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; // true
'__proto__' in person; // true
'toString' in person; // trueWhile
hasOwnPropertyreturnsfalsewhen checking against these properties and methods:person.hasOwnProperty('constructor'); // false
person.hasOwnProperty('__proto__'); // false
person.hasOwnProperty('toString'); // falseFor the
getandsetmethods of a class,hasOwnPropertyalso returnsfalse.For example, we have a simple class representing triangles:
class Triangle {
get vertices() {
return 3;
}
}
// Create new instance
const triangle = new Triangle();Despite the fact that
verticesis the property oftriangle:triangle.vertices; // 3
'vertices' in triangle; // truehasOwnPropertystill ignores it:triangle.hasOwnProperty('vertices'); // false
Good practice
In order to check the existence of a property, use hasOwnProperty. Use in to check the existence of a method.