Every now and then, I see this pattern:
if (!obj[key]) {
// key does not exist inside object
obj[key] = ...
} else {
// maybe do something else with obj[key]
}
but I find it extremely wrong. What if actually obj[key] has the value false
or ''
?
Then the code doesn't make any sense to me.
Is there a reason I see this so often ? Why people don't use .hasOwnProperty()
to check whether or not a key
exists as a property of an object ?
You should use the in
operator:
"key" in obj // true, regardless of the actual value
if you want to particularly test for properties of the object instance (and not inherited properties), use hasOwnProperty:
obj.hasOwnProperty("key") // true
For performance comparison between the methods that are in, hasOwnProperty and key is undefined, check this reference