DEV Community

Ethan Arrowood
Ethan Arrowood

Posted on

6 2

Which is faster: obj.hasOwnProperty(prop) vs Object.keys(obj).includes(prop)

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)

Collapse
 
ycmjason profile image
YCM Jason • Edited

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 the in 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.

Collapse
 
ethanarrowood profile image
Ethan Arrowood • Edited

Turns out the Array includes method is faster!
thepracticaldev.s3.amazonaws.com/i...

Collapse
 
ycmjason profile image
YCM Jason

interesting, is this running on node?

Collapse
 
ycmjason profile image
YCM Jason

Try a bigger object, say with 20000 keys.

Collapse
 
varoman profile image
varo manukyan

I like testing execution time with console.time(string) and console.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 to prop 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.

Collapse
 
rhymes profile image
rhymes

Maybe you can find out with github.com/bestiejs/benchmark.js/ ?

Some comments may only be visible to logged-in visitors. Sign in to view all comments.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay