for in vs for of

Benchmark created on


Setup

const REPEATS_COUNT = 1_000_000;
const ITEMS_COUNT = 1000;

function* generateData()
{
	for (let i = 0; i < ITEMS_COUNT; i++)
	{
		yield [`item${i}`, i];
	}
}

const dataObject = Object.fromEntries(generateData());

function noop(...args)
{}

Test runner

Ready to run.

Testing in
TestOps/sec
for in
for (let i = 0; i < REPEATS_COUNT; i++)
{
	for (const key in dataObject)
	{
		noop(key);
	}
}
ready
for of
for (let i = 0; i < REPEATS_COUNT; i++)
{
	for (const key of Object.keys(dataObject))
	{
		noop(key);
	}
}
ready
for of with Object.keys outside loop
const keys = Object.keys(dataObject);

for (let i = 0; i < REPEATS_COUNT; i++)
{
	for (const key of keys)
	{
		noop(key);
	}
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.