DEV Community

Cover image for JavaScript Arrays vs Objects: Myths, Destructuring & Puzzles That Will Break Your Brain
Ebenezer
Ebenezer

Posted on

JavaScript Arrays vs Objects: Myths, Destructuring & Puzzles That Will Break Your Brain

I remember staring at my screen at 11 PM, completely lost.

My mentor said "just store the data in an array."

My tutorial said "use an object for this."

I had no idea why one over the other.

I copy-pasted both. Neither made sense. I felt like a fraud.

If that's you right now — welcome. You're in the right place.

Here's exactly what we'll cover:

  • 🧱 Why arrays were invented (the real story)
  • ⚔️ Arrays vs Objects — what actually makes them different
  • 💣 Myths that confuse 90% of beginners (and some seniors)
  • 🔓 Destructuring — the superpower nobody explains simply
  • 🧩 Tricky puzzles that even pro developers get wrong

1. Why Did Arrays Even Come Into Existence?

Imagine you're a teacher. You have 30 students. You need to store their names.

Without arrays, here's what your code would look like:

// 😱 The nightmare — storing 30 names without arrays
let student1 = "Arjun";
let student2 = "Priya";
let student3 = "Rahul";
// ... 27 more lines of this pain
Enter fullscreen mode Exit fullscreen mode

Now imagine looping through them. Or sorting them. Or finding just one name.

Impossible.

Arrays were invented to solve exactly this — storing a list of related items under one name.

// ✅ The dream — one array holds everything
let students = ["Arjun", "Priya", "Rahul", "Sneha", "Vikram"];

console.log(students[0]); // "Arjun"
console.log(students.length); // 5
Enter fullscreen mode Exit fullscreen mode

An array is like a row of numbered lockers 🔒.

Each locker has a number (starting from 0). You put things inside. You get them back by their number.

That's it. That's the origin story.


2. So What's an Object Then?

An object is what you reach for when your data has labels, not just a position.

Think of a student's profile:

// An array can store the values, but which is which?
let studentArray = ["Arjun", 21, "Computer Science", true];
// Wait... which index is the name? Which is the age? 🤔

// An object gives every value a name
let studentObject = {
  name: "Arjun",
  age: 21,
  department: "Computer Science",
  isEnrolled: true
};

console.log(studentObject.name); // "Arjun" — crystal clear
Enter fullscreen mode Exit fullscreen mode

An object is like a contact card 📇.

Each field has a label (key) and a value. You don't need to remember positions.

The Simple Rule to Remember Forever

Use an array when order matters and items are similar.

Use an object when items are different and need labels.

Situation Use
List of student names Array
One student's profile Object
Weekly temperatures Array
Weather data (temp, humidity, city) Object
Cart items in a store Array of Objects 🔥

3. 💣 Myths That Are Lying to You

Myth #1: "Arrays and Objects are completely different things"

The truth? In JavaScript, arrays ARE objects.

// This will shock you
console.log(typeof []); // "object" 😱
console.log(typeof {}); // "object"

// Arrays are just special objects with numeric keys
let arr = ["a", "b", "c"];
// JavaScript secretly sees this as:
// { 0: "a", 1: "b", 2: "c", length: 3 }
Enter fullscreen mode Exit fullscreen mode

An array is a object wearing a costume. It has numeric keys and a length property.


Myth #2: "Objects don't have order"

The truth? Modern JavaScript (ES2015+) actually maintains insertion order for string keys.

let obj = { banana: 1, apple: 2, cherry: 3 };
console.log(Object.keys(obj)); // ["banana", "apple", "cherry"] ✅ — order preserved!
Enter fullscreen mode Exit fullscreen mode

But here's the twist — numeric keys get sorted automatically:

let tricky = { 2: "two", 1: "one", name: "test" };
console.log(Object.keys(tricky)); // ["1", "2", "name"] 😲 — numbers sorted first!
Enter fullscreen mode Exit fullscreen mode

Myth #3: "You can't loop through an object"

The truth? You absolutely can — just differently.

let student = { name: "Priya", age: 20, city: "Chennai" };

// Loop through object keys
for (let key in student) {
  console.log(key + ": " + student[key]);
}
// name: Priya
// age: 20
// city: Chennai
Enter fullscreen mode Exit fullscreen mode

Myth #4: "Arrays are faster than objects for everything"

The truth? Objects are actually faster for lookups by key.

// Finding "Rahul" in an array = check every item one by one 🐢
let names = ["Arjun", "Priya", "Rahul", "Sneha"];

// Finding "Rahul" in an object = instant lookup 🚀
let nameMap = { Arjun: true, Priya: true, Rahul: true, Sneha: true };
console.log(nameMap["Rahul"]); // true — found instantly
Enter fullscreen mode Exit fullscreen mode

This is why objects are used in hash maps and lookup tables.


4. 🔓 Destructuring — The Superpower Nobody Explains Simply

Destructuring means pulling values out of arrays or objects into variables — in one clean line.

Object Destructuring

Without destructuring:

let student = { name: "Arjun", age: 21, city: "Mumbai" };

// Old way 😩 — three lines for three values
let name = student.name;
let age = student.age;
let city = student.city;
Enter fullscreen mode Exit fullscreen mode

With destructuring:

// New way 🔥 — one line, same result
let { name, age, city } = student;

console.log(name); // "Arjun"
console.log(age);  // 21
console.log(city); // "Mumbai"
Enter fullscreen mode Exit fullscreen mode

The variable names must match the keys. JavaScript matches them by name.

Rename While Destructuring

let { name: studentName, age: studentAge } = student;
// Now the variable is "studentName", not "name"
console.log(studentName); // "Arjun"
Enter fullscreen mode Exit fullscreen mode

Default Values

let { name, score = 100 } = { name: "Priya" };
// "score" doesn't exist in object, so it uses the default
console.log(score); // 100
Enter fullscreen mode Exit fullscreen mode

Array Destructuring

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

// Pull them out by position
let [first, second, third] = colors;
console.log(first);  // "red"
console.log(second); // "green"

// Skip an item using a comma
let [primary, , tertiary] = colors;
console.log(primary);  // "red"
console.log(tertiary); // "blue" — green was skipped!
Enter fullscreen mode Exit fullscreen mode

The Swap Trick (Destructuring party trick 🎉)

let a = 1, b = 2;

// Swap without a temp variable
[a, b] = [b, a];

console.log(a); // 2
console.log(b); // 1
Enter fullscreen mode Exit fullscreen mode

5. 🧩 Tricky Puzzles — Beginners Will Struggle, Pros Will Double-Check

Puzzle 1: What does this print?

let arr = [1, 2, 3];
arr[10] = 99;

console.log(arr.length); // ❓
console.log(arr[5]);     // ❓
Enter fullscreen mode Exit fullscreen mode

👉 Click to reveal answer

arr.length → 11
arr[5]     → undefined
Enter fullscreen mode Exit fullscreen mode

JavaScript creates "holes" (empty slots) between index 3 and index 10.
The length becomes 11 (0 to 10), and any hole returns undefined.


Puzzle 2: Are these equal?

console.log([] == false);  // ❓
console.log([] === false); // ❓
Enter fullscreen mode Exit fullscreen mode

👉 Click to reveal answer

[] == false   true  😱
[] === false  false
Enter fullscreen mode Exit fullscreen mode

== does type coercion. An empty array [] converts to "" which converts to 0, and false converts to 0. So 0 == 0 is true.

=== (strict equality) does NO conversion — different types, so false.


Puzzle 3: What's the output?

let obj = { a: 1 };
let copy = obj;
copy.a = 999;

console.log(obj.a); // ❓
Enter fullscreen mode Exit fullscreen mode

👉 Click to reveal answer

obj.a → 999
Enter fullscreen mode Exit fullscreen mode

Objects are stored by reference, not by value. copy and obj point to the same object in memory. Changing one changes both.

To truly copy: let copy = { ...obj };


Puzzle 4: This one hurts. What prints?

let user = { name: "Dev", scores: [10, 20, 30] };
let { name, scores: [first, ...rest] } = user;

console.log(name);  // ❓
console.log(first); // ❓
console.log(rest);  // ❓
Enter fullscreen mode Exit fullscreen mode

👉 Click to reveal answer

name  → "Dev"
first → 10
rest  → [20, 30]
Enter fullscreen mode Exit fullscreen mode

This is nested destructuring + rest operator combined.
scores: [first, ...rest] destructures the scores array inline.
...rest collects everything after first into a new array.


Puzzle 5: The boss-level one 🔥

const key = "name";
const obj = { [key]: "Arjun", age: 21 };

console.log(obj.name);  // ❓
console.log(obj.key);   // ❓
console.log(obj[key]);  // ❓
Enter fullscreen mode Exit fullscreen mode

👉 Click to reveal answer

obj.name   "Arjun"
obj.key    undefined
obj[key]   "Arjun"
Enter fullscreen mode Exit fullscreen mode

[key] is a computed property name — it uses the value of key (which is "name") as the property name.

obj.key looks for a literal key called "key" — it doesn't exist.
obj[key] evaluates key"name" → finds obj["name"]"Arjun".


What You Learned Today

  • ✅ Arrays were born to solve the "too many variables" problem — they're ordered lists
  • ✅ Objects give your data labels — use them when things have names, not positions
  • ✅ Arrays ARE objects in JavaScript — typeof [] === "object"
  • ✅ Destructuring lets you unpack values in one elegant line
  • ✅ Objects hold references — copying one means both change unless you spread it

Your next step: Open your browser console right now. Type out Puzzle 3 from scratch without peeking. Then fix it using the spread operator. That 2-minute exercise will make references click forever.

Over to you: Which puzzle broke your brain the most? Or do you have a trickier one? Drop it in the comments — I read every single one. 👇


Top comments (0)