Understanding Objects in JavaScript — A Developer's Exploration

Search for a command to run...

No comments yet. Be the first to comment.
Realtime Systems Deep Dive: Polling, WebSockets, SSE, and Pub/Sub Explained TL;DR: Realtime communication is not one technology — it's a spectrum of patterns, each with distinct trade-offs in latency

Realtime Systems Deep Dive: Polling, WebSockets, SSE, and Pub/Sub Explained TL;DR: Realtime communication is not one technology — it's a spectrum of patterns, each with distinct trade-offs in latency

How ChatGPT Understands Your Questions: A Deep Dive into LLMs, Tokenization, and Transformers TL;DR: ChatGPT doesn't "read" your question the way you do. It converts text into numbers, processes thos

Building Scalable Systems: Caching, Rate Limiting, and Observability TL;DR: Scaling isn't just about adding more servers. It's about protecting your system with intelligent caching, guarding your API

Kafka Explained Like You're 5: Events, Partitions, and Consumer Groups TL;DR: Kafka is a distributed event streaming platform that decouples producers from consumers using topics and partitions, enab

By Saurabh Prajapati | Full-Stack Software Engineer at IBM India
When I first started learning JavaScript, arrays felt natural to me. A list of things? Easy. But then I kept running into this pattern everywhere in codebases at work:
const user = { name: "Saurabh", age: 25, city: "India" };
And I thought — wait, this looks different. What even is this?
That curiosity led me down a rabbit hole of JavaScript objects. And honestly? It was one of those topics where once it clicked, I started seeing it everywhere. APIs return objects. React state is an object. Config files are objects.
Let me walk you through everything I learned — step by step, the way I wish someone had explained it to me.
Think about a real person. They have a name, an age, a city they live in. Now, how would you store all of that in code?
You could use separate variables:
let name = "Saurabh";
let age = 25;
let city = "Ahmedabad";
But this gets messy fast. What if you had 100 users? You'd have 300 variables flying around.
That's where objects come in. An object lets you group related data together under one name.
const person = {
name: "Saurabh",
age: 25,
city: "Ahmedabad"
};
Clean, right? Everything about that person lives in one place.
Here's the mental model that made it click for me:
An object is like a dictionary — or even a real-life ID card.
Every piece of information has a label (key) and a value.
┌─────────────────────────────┐
│ person │
├──────────────┬──────────────┤
│ KEY │ VALUE │
├──────────────┼──────────────┤
│ name │ "Saurabh" │
│ age │ 25 │
│ city │ "Ahmedabad" │
└──────────────┴──────────────┘
The key is always a string (or symbol, but let's not go there yet)
The value can be anything — a string, number, boolean, array, even another object
Great question — I confused these two at first.
Here's the honest difference:
// Array — ordered list, accessed by index (position)
const fruits = ["apple", "mango", "banana"];
console.log(fruits[0]); // "apple"
// Object — labeled data, accessed by key (name)
const person = { name: "Saurabh", age: 25 };
console.log(person.name); // "Saurabh"
| Feature | Array | Object |
|---|---|---|
| Stores | Ordered list of items | Key-value pairs |
| Access by | Index (0, 1, 2) |
Key (name, age) |
| Best for | Lists of similar things | Describing one "thing" |
| Example | List of users | One user's details |
Use an array when you have a collection of things. Use an object when you want to describe one thing with multiple properties.
There are a few ways to create objects. The most common (and cleanest) is the object literal syntax:
const person = {
name: "Saurabh",
age: 25,
city: "Ahmedabad"
};
That's it. Curly braces {}, key-value pairs separated by colons :, and commas , between pairs.
You can also create an empty object and add properties later (we'll get to that):
const person = {};
Okay, so we have an object. Now how do we read the values?
There are two ways to do this.
const person = {
name: "Saurabh",
age: 25,
city: "Ahmedabad"
};
console.log(person.name); // "Saurabh"
console.log(person.age); // 25
console.log(person.city); // "Ahmedabad"
Simple and readable. This is what you'll use 90% of the time.
console.log(person["name"]); // "Saurabh"
console.log(person["age"]); // 25
Looks a bit unusual at first. But here's when it's actually really useful — when the key is stored in a variable:
const key = "name";
console.log(person[key]); // "Saurabh" 🎉
I didn't get why bracket notation existed until I hit this exact situation. Now I use it whenever the property name is dynamic (like from user input or an API response).
Objects are mutable — you can change their values after creation.
const person = {
name: "Saurabh",
age: 25,
city: "Ahmedabad"
};
// Update an existing property
person.age = 26;
console.log(person.age); // 26
Wait, isn't person a const? Can we still change it?
Yes! const means you can't reassign the variable itself, but you can modify what's inside the object. This tripped me up early on.
// ❌ This will throw an error
person = { name: "Someone else" };
// ✅ This is perfectly fine
person.name = "SP";
Just assign to a new key — even if it didn't exist before:
const person = {
name: "Saurabh",
age: 25
};
// Add a new property
person.country = "India";
person.isAvailable = true;
console.log(person);
// { name: "Saurabh", age: 25, country: "India", isAvailable: true }
This felt almost too easy at first. No need to declare it — just assign and it's there.
Use the delete keyword:
delete person.age;
console.log(person);
// { name: "Saurabh", country: "India", isAvailable: true }
Honestly, I rarely use delete in real projects. It's cleaner to either set a property to null or undefined, or just not include it at all. But it's good to know.
Here's something I spent too long Googling before it stuck.
You can't loop over an object with a regular for loop like you do with arrays. Objects aren't indexed.
But you have a few solid options:
for...in Loopconst person = {
name: "Saurabh",
age: 25,
city: "Ahmedabad"
};
for (let key in person) {
console.log(key + ": " + person[key]);
}
// name: Saurabh
// age: 25
// city: Ahmedabad
This loops over every key in the object. Notice how we use bracket notation person[key] here — because key is a variable. Dot notation wouldn't work!
Object.keys(), Object.values(), Object.entries()These are super useful helpers:
// Get all keys as an array
console.log(Object.keys(person));
// ["name", "age", "city"]
// Get all values as an array
console.log(Object.values(person));
// ["Saurabh", 25, "Ahmedabad"]
// Get key-value pairs as an array of arrays
console.log(Object.entries(person));
// [["name", "Saurabh"], ["age", 25], ["city", "Ahmedabad"]]
I use Object.entries() a lot when I need to loop with both the key and the value at the same time:
for (let [key, value] of Object.entries(person)) {
console.log(`\({key}: \){value}`);
}
This blew my mind when I first saw it. So clean!
Here's what surprised me most:
Objects can hold anything as values — including functions (which become "methods") and other objects. This is how things like console.log() actually work.
Properties don't have to be valid variable names — if your key has spaces or special characters, you must use quotes and bracket notation:
const obj = { "my-key": "value" };
console.log(obj["my-key"]); // "value"
Order isn't guaranteed — well, mostly. Numeric keys are sorted first, then string keys in insertion order. Don't rely on order if you need a sorted list — use an array instead.
Once I understood objects, I started noticing them everywhere:
API responses — almost every API returns JSON, which is just... objects
React state — useState({ loading: false, data: null, error: null })
Config files — package.json is literally a JavaScript object
Function parameters — passing objects as arguments keeps code clean
A quick real-world example from my work at IBM with enterprise apps:
// A config object for a Maximo API call
const apiConfig = {
endpoint: "/api/mbo/workorder",
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer token123"
},
timeout: 5000
};
Once you understand objects, patterns like this start making complete sense.
Alright, let's recap what we covered:
What objects are — key-value pairs that group related data
How to create them — using object literal syntax {}
Accessing properties — dot notation and bracket notation (and when to use each)
Updating properties — direct assignment
Adding and deleting — just assign new keys or use delete
Looping — for...in, Object.keys(), Object.values(), Object.entries()
Objects are one of those foundational topics in JavaScript that everything else builds on. Spend time here, experiment in your browser console, and build a few small things with them.
Have a go at the student assignment above, and if you feel confident, try creating an object that represents yourself — name, skills (as an array!), and current role.
I'm still exploring deeper object patterns myself — things like object destructuring, the spread operator, and object methods. If you want me to cover those next, let me know!
Saurabh Prajapati is a Full-Stack Software Engineer at IBM India Software Lab, where he works on Maximo — building cloud-native, enterprise-level solutions.
He specializes in GenAI, React, and modern web technologies, and loves sharing his learning journey with the developer community. He's worked across multiple companies building AI-powered tools, enterprise applications, and scalable web platforms.
💻 GitHub: prajapatisaurabh
🔗 LinkedIn: saurabh-prajapati