I don't know how to test runtime speed but I'm interested in which of these methods would cause more overhead.
Given an object with n properties (also called keys) is it faster to check if that property exists using obj.hasOwnProperty(prop)
or Object.keys(obj).includes(prop)
. Something to consider is what if you need to check multiple properties multiple times?
If you store the keys
in a variable: const keys = Object.keys(obj)
and then make a series of checks keys.includes(prop1); keys.includes(prop2);
is this faster or slower than obj.hasOwnProperty(prop1); obj.hasOwnProperty(prop2);
Top comments (6)
I bet it has to be
Object.hasOwnProperty
.Depending on the runtime implementation, Object in JavaScript should be somewhat similar to a HashMap. So a key lookup should be O(1).
Array.includes
on the other hand is obviously O(n). They really are not very comparable.Object.hasOwnProperty
would be more comparable to thein
operator.in
should be a little bit more complicated as it looks through the prototype chain as well. But for keys that are already attached to an Object, I suppose it should give a similar, if not the same, time complexity.Turns out the Array includes method is faster!
thepracticaldev.s3.amazonaws.com/i...
Try a bigger object, say with 20000 keys.
interesting, is this running on node?
I like testing execution time with
console.time(string)
andconsole.timeEnd(string)
.Though, as one could guess testing performance this way is a fail. It will give various results every time. You'd better use developer tools instead.
Anyway,
Object.hasOwnProperty
compared toprop in obj
should be incredibly faster as the latter run through all the prototype chain of an object. I've run that tests on small objects and get what I expected.Maybe you can find out with github.com/bestiejs/benchmark.js/ ?