admin-plugins author calendar category facebook post rss search twitter star star-half star-empty

Tidy Repo

The best & most reliable WordPress plugins

How to Use the For in loop in Javascript

How to Use the For in loop in Javascript

Ethan Martinez

December 8, 2025

Blog

JavaScript is one of the core technologies powering the modern web and is used on millions of websites to create dynamic and interactive experiences. One of its foundational constructs is loops, which help you execute blocks of code multiple times. The for...in loop is particularly useful when working with objects — a data type that holds properties and values. If you’ve ever wanted to iterate through all the keys in an object, the for...in loop is your go-to tool. Let’s dive into how this loop works and examine when it’s best to use it.

TL;DR

The for...in loop in JavaScript is used to iterate over the enumerable properties of an object. It loops through the keys, not the values, and is best for stepping through objects rather than arrays. If you’re working with arrays, other loops like for or forEach may be more appropriate. Always remember that for...in includes all enumerable properties, including inherited ones (unless filtered).

Understanding the for...in Loop

The for...in loop allows you to iterate over all enumerable properties of an object. Here’s the basic syntax:

for (let key in object) {
  // code to be executed
}

In this syntax:

  • key is a variable assigned to a different property name on each iteration.
  • object is the object whose enumerable properties are iterated.

This loop allows you to access each key in the object one at a time, and you can retrieve the value using object[key].

Example:

const car = {
  make: "Toyota",
  model: "Corolla",
  year: 2020
};

for (let key in car) {
  console.log(key + ": " + car[key]);
}

Output:

make: Toyota
model: Corolla
year: 2020

When Should You Use It?

The for...in loop is best used when you’re dealing with objects, not arrays or other iterable data structures. That’s because arrays have indexed properties, and looping through them using for...in can lead to unexpected behavior, especially if someone or something has added custom properties to Array.prototype.

Use for...in when:

  • You want to loop over all the enumerable properties of an object
  • You don’t care about the order of keys
  • The object may have an unknown number of properties

Don’t use it for arrays, especially when order matters. For that, use for, for...of, or forEach.

Practical Use Cases

Here are a few situations where for...in loops shine:

  • Reading a dynamic JSON object. Imagine you’ve received some data from a server, and you’re not sure what keys it includes. Looping through it with for...in gives you flexibility.
  • Working with object literals. If you’re working with user-defined settings or configuration options stored as key-value pairs, the for...in loop is a clean way to access them.
  • Debugging object property values. Want to log all properties of an object? for...in makes this fast.

Potential Caveats and Gotchas

While powerful, the for...in loop isn’t without its quirky behaviors. Here’s what you should be cautious of:

1. Inherited Properties

The for...in loop iterates over all enumerable properties, including those that the object inherits from its prototype chain. This can pose a problem if you only want the object’s “own” properties.

const person = { name: "Alice" };
person.__proto__.age = 30;

for (let key in person) {
  console.log(key + ": " + person[key]);
}
// Output:
// name: Alice
// age: 30

To filter only the object’s own properties, use hasOwnProperty:

for (let key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key + ": " + person[key]);
  }
}

2. Not Guaranteed to Be in Order

Property order is not guaranteed when using for...in. Although modern engines often return them in the order they were added, this behavior is not specified in the ECMAScript standard. Never rely on order when using for...in.

3. Better Alternatives for Arrays

While technically possible to use for...in on arrays, it’s a bad practice. Here’s why:

const fruits = ["apple", "banana", "cherry"];

for (let index in fruits) {
  console.log(fruits[index]);
}

Seems okay? But if someone adds a method to Array.prototype, it could show up in this loop unexpectedly. Use for or for...of instead for arrays.

Inside the Hood: How JavaScript Determines Enumerability

Not all properties are enumerable. JavaScript marks properties with internal attributes that determine whether they can show up in loops like for...in.

You can define this behavior yourself using Object.defineProperty:

const obj = {};
Object.defineProperty(obj, 'hidden', {
  value: 'secret',
  enumerable: false
});

for (let key in obj) {
  console.log(key); // Won’t output 'hidden'
}

This example shows how hiding properties from enumeration is possible, which is especially useful for things like internal logic or metadata.

for...in vs. for...of

Both loops look similar but serve different purposes:

  • for...in: Iterates over keys (property names)
  • for...of: Iterates over values (in iterables like arrays, strings, maps)

Example comparison:

const colors = ["red", "green", "blue"];

for (let index in colors) {
  console.log(index); // Outputs: 0, 1, 2
}

for (let color of colors) {
  console.log(color); // Outputs: red, green, blue
}

So, use for...of when dealing with iterable data (arrays, strings, sets, etc.), and for...in when you need to explore object keys.

Real-World Example: Filtering User Settings

Suppose you have a configuration object with user settings and want to validate or manipulate each setting:

const userSettings = {
  theme: "dark",
  fontSize: "14px",
  showNotifications: true
};

for (let key in userSettings) {
  if (userSettings.hasOwnProperty(key)) {
    console.log("Setting " + key + " is " + userSettings[key]);
  }
}

This kind of loop is especially useful in apps with dynamic UI configurations, form builders, and manageably large datasets stored as objects.

Conclusion

The for...in loop is a fundamental part of JavaScript, offering a straightforward way to iterate over object properties. While it’s not suited for iterating through arrays or ordered data, it’s incredibly useful when working with objects of dynamic or unknown structure.

By understanding how for...in behaves—especially with inheritance and enumerability—you can use it with confidence and clarity. Just remember to use hasOwnProperty</code