Learn how to count the number of properties in a JavaScript object, with two different methods.
To count the number of JavaScript object properties, you can either use:
- a
forloop - or the
Object.keys()method.
Let’s explore them both!
Count object properties with a for loop
Here’s a JavaScript object called dog:
const dog = {
name: "Naya",
age: 2,
color: "black",
Breed: "Rottweiler mix",
}To count the number of object properties in dog, let’s first declare a variable called count and give it a start value of 0:
let count = 0Now we need to loop through the dog object and for each property we come across we add one (+ 1) to the count variable:
for (let properties in dog) {
count = count + 1
}Now try printing the result by using console.log():
console.log(count)
// Result: 4If you wrote the code correctly, you should get 4.
Count object properties with Object.keys()
You can also use JavaScript’s Object.keys() method to count all the enumerable properties (more about that in a sec) on an object.
Let’s reuse the dog object from before, but now we pass the dog object to Object.keys() and calculate its length with the length property:
const dog = {
name: "Naya",
age: 2,
color: "black",
Breed: "Rottweiler mix",
}
let count = Object.keys(dog).length
console.log(count)
// Result: 4As you can see, the result is the same. Or is it?
Yes and no. It depends on the context.
for vs. Object.keys()
The difference between using a for loop and Object.keys() is:
- The
forloop counts both the properties of the object (here,dog) and any properties that might be linked to the object outside of it. - By default, the
Object.keys()method only counts (enumerates) the object’s (own) enumerate properties — not linked properties.
Enumeration is another word for counting.
What do I mean with “linked properties”?
Let’s take the same Object.keys() example from before, but this time we link the dog object to an object called animal by using the _proto_ property:
// New object
let animal = {
fourLegs: true,
}
const dog = {
name: "Naya",
age: 2,
color: "black",
Breed: "Rottweiler mix",
}
// Link dog object to animal object
dog.__proto__ = animal
var count = Object.keys(dog).length
console.log(count)
// Result: 4Why is the result 4, when the total number of properties of dog and animal is 5, and we just linked them together and counted them?
Because we’re using Object.keys() which only counts its own (enumerable) properties, not linked properties. Therefore the fourLegs property from the animal object doesn’t get counted in the example above.
Now let’s try another example, but this time we use the for loop to count properties:
const animal = {
fourLegs: true,
}
const dog = {
name: "Naya",
age: 2,
color: "black",
Breed: "Rottweiler mix",
}
// Link dog object to animal object
dog.__proto__ = animal
let count = 0
for (properties in dog) {
count = count + 1
}
console.log(count)
// Result: 5Now we’re getting all 5 properties, because unlike Object.keys() when we use a for loop we count every property of an object, including linked object properties.
As you can see, it matters which approach you use.
In summary:
- There are two ways to count the number of properties in an object. You can use a
forloop or theObject.keys()method. - Use a
forloop if you wish to include any linked object properties in your property count. - Use
Object.keys()if you only wish to count enumerable properties (the object’s own).