📋 Understanding Arrays
An array in JavaScript is a special type of object designed to store multiple values in a single variable. It is useful for organizing collections of data, allowing you to store, access, and manage items efficiently using their index positions.
Key characteristics of JavaScript arrays are:
Elements: An array is a list of values, known as elements.
Ordered: Array elements are ordered based on their index.
Zero indexed: The first element is at index 0, the second at index 1, and so on.
Dynamic size: Arrays can grow or shrink as elements are added or removed.
Heterogeneous: Arrays can store elements of different data types (numbers, strings, objects and other arrays).
<div class="infographic-jsarray">
<style>
.infographic-jsarray {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--line: #ddd6c9;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--warn: #b45309;
--warn-soft: #fdf0dc;
--purple: #7c3aed;
--purple-soft:#ede9fe;
--ok: #1a7f4e;
--ok-soft: #e3f5ec;
--display-font: 'Fraunces', Georgia, serif;
--body-font: 'Inter', -apple-system, sans-serif;
--mono-font: 'IBM Plex Mono', 'Courier New', monospace;
margin: 0 auto;
box-sizing: border-box;
font-family: var(--body-font);
color: var(--ink);
background: var(--paper);
}
.infographic-jsarray[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--line: #2c313d;
--accent: #5b8def;
--accent-soft:#202942;
--warn: #e0a458;
--warn-soft: #3a2c14;
--purple: #a78bfa;
--purple-soft:#2c2140;
--ok: #5cd6a0;
--ok-soft: #16342a;
}
.infographic-jsarray * { box-sizing: border-box; }
.infographic-jsarray .ig-inner { padding: 1.75rem clamp(1.25rem, 5vw, 3rem) 2rem; }
.infographic-jsarray .ig-title {
font-family: var(--display-font); font-size: clamp(1.4rem, 4.5vw, 1.9rem);
font-weight: 600; text-align: center; margin: 0 0 1.75rem;
}
.infographic-jsarray .elements-label {
text-align: center; font-size: 0.78rem; font-weight: 700; color: var(--ink-soft);
letter-spacing: 0.03em; margin-bottom: 0.4rem;
}
.infographic-jsarray .diagram-scroll { overflow-x: auto; padding-bottom: 0.3rem; }
.infographic-jsarray .diagram-row { display: flex; align-items: flex-end; gap: 0.6rem; justify-content: center; min-width: min-content; }
.infographic-jsarray .index-label {
font-size: 0.75rem; color: var(--ink-soft); white-space: nowrap; display: flex; align-items: center; gap: 0.3rem;
padding-bottom: 0.15rem; margin-right: 0.1rem;
}
.infographic-jsarray .slot { display: flex; flex-direction: column; align-items: center; }
.infographic-jsarray .down-arrow { font-size: 0.85rem; color: var(--line); margin-bottom: 0.2rem; }
.infographic-jsarray .elbox {
width: 4.4rem; height: 4.4rem; border-radius: 50%; display: flex; align-items: center; justify-content: center;
font-family: var(--mono-font); font-size: 1rem; font-weight: 700; cursor: pointer;
border: 2px solid var(--line); background: var(--paper-alt); color: var(--ink);
transition: transform 0.15s ease, border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
text-align: center; padding: 0.2rem; overflow: hidden;
}
.infographic-jsarray .elbox:hover { transform: translateY(-2px); }
.infographic-jsarray .elbox.type-number { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }
.infographic-jsarray .elbox.type-string { border-color: var(--warn); color: var(--warn); background: var(--warn-soft); }
.infographic-jsarray .elbox.type-boolean { border-color: var(--purple); color: var(--purple); background: var(--purple-soft); }
.infographic-jsarray .elbox.is-selected { box-shadow: 0 0 0 3px var(--paper), 0 0 0 5px currentColor; }
.infographic-jsarray .elbox.pop { animation: arr-pop 0.3s ease; }
@keyframes arr-pop { 0% { transform: scale(0.4); opacity: 0; } 60% { transform: scale(1.12); } 100% { transform: scale(1); opacity: 1; } }
.infographic-jsarray .idx-num { font-size: 0.78rem; color: var(--ink-soft); margin-top: 0.45rem; font-family: var(--mono-font); }
.infographic-jsarray .controls { display: flex; justify-content: center; gap: 0.5rem; margin-top: 1.5rem; flex-wrap: wrap; }
.infographic-jsarray .ctrl-btn {
font: inherit; font-size: 0.78rem; font-weight: 700; font-family: var(--mono-font);
border: 1px dashed var(--line); background: var(--paper-alt); color: var(--ink-soft);
padding: 0.4rem 0.75rem; border-radius: 999px; cursor: pointer;
}
.infographic-jsarray .ctrl-btn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
.infographic-jsarray .ctrl-btn:disabled { opacity: 0.45; cursor: default; }
.infographic-jsarray .ctrl-btn.pop-btn:hover:not(:disabled) { border-color: var(--warn); color: var(--warn); }
.infographic-jsarray .call-line {
font-family: var(--mono-font); font-size: 0.85rem; text-align: center; font-weight: 700;
padding: 0.55rem 0.8rem; border-radius: 6px; margin-top: 1.25rem;
background: var(--paper-alt); color: var(--ink-soft); border: 1px solid var(--line);
min-height: 1.3em;
}
.infographic-jsarray .call-line.is-active { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }
.infographic-jsarray .caption {
text-align: center; font-size: 0.82rem; color: var(--ink-soft); margin-top: 1rem;
}
.infographic-jsarray .caption strong { color: var(--ink); }
@media (prefers-reduced-motion: reduce) {
.infographic-jsarray *, .infographic-jsarray *::before, .infographic-jsarray *::after {
animation-duration: 0.001ms !important; transition-duration: 0.001ms !important;
}
}
</style>
<div class="ig-inner">
<h2 class="ig-title">JavaScript Array</h2>
<div class="elements-label">Array Elements</div>
<div class="diagram-scroll">
<div class="diagram-row" id="diagramRow"></div>
</div>
<div class="controls">
<button class="ctrl-btn" id="pushNum">+ number</button>
<button class="ctrl-btn" id="pushStr">+ string</button>
<button class="ctrl-btn" id="pushBool">+ boolean</button>
<button class="ctrl-btn pop-btn" id="popBtn">− pop</button>
</div>
<div class="call-line" id="callLine">click an element to inspect it</div>
<p class="caption" id="caption">Ordered, zero-indexed, resizable, and free to mix types — click a value or grow the array.</p>
</div>
</div>
<script>
(function () {
const wrapper = document.currentScript.closest('.infographic-jsarray')
|| document.querySelector('.infographic-jsarray');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
const diagramRow = wrapper.querySelector('#diagramRow');
const callLine = wrapper.querySelector('#callLine');
const caption = wrapper.querySelector('#caption');
const pushNum = wrapper.querySelector('#pushNum');
const pushStr = wrapper.querySelector('#pushStr');
const pushBool = wrapper.querySelector('#pushBool');
const popBtn = wrapper.querySelector('#popBtn');
const MAX = 8;
let arr = [
{ v: 2, t: 'number' },
{ v: 16, t: 'number' },
{ v: 24, t: 'number' },
{ v: 32, t: 'number' },
{ v: 4, t: 'number' }
];
let selected = null;
const STRINGS = ['"hi"', '"js"', '"cat"', '"go"', '"ok"'];
const BOOLS = [true, false];
let strCursor = 0;
function typeOfDisplay(el) {
return el.t === 'string' ? el.v : String(el.v);
}
function render(justPushed) {
diagramRow.innerHTML = '';
arr.forEach((el, i) => {
const slot = document.createElement('div');
slot.className = 'slot';
const arrow = document.createElement('div');
arrow.className = 'down-arrow';
arrow.textContent = '↓';
slot.appendChild(arrow);
const box = document.createElement('div');
box.className = `elbox type-${el.t}` + (selected === i ? ' is-selected' : '') + (justPushed && i === arr.length - 1 ? ' pop' : '');
box.textContent = typeOfDisplay(el);
box.addEventListener('click', () => selectIndex(i));
slot.appendChild(box);
const idxWrap = document.createElement('div');
idxWrap.style.display = 'flex';
idxWrap.style.alignItems = 'center';
if (i === 0) {
const lbl = document.createElement('span');
lbl.className = 'index-label';
lbl.textContent = 'Array Index →';
idxWrap.appendChild(lbl);
}
const idx = document.createElement('span');
idx.className = 'idx-num';
idx.textContent = i;
idxWrap.appendChild(idx);
slot.appendChild(idxWrap);
diagramRow.appendChild(slot);
});
pushNum.disabled = arr.length >= MAX;
pushStr.disabled = arr.length >= MAX;
pushBool.disabled = arr.length >= MAX;
popBtn.disabled = arr.length === 0;
}
function selectIndex(i) {
selected = i;
render(false);
const el = arr[i];
callLine.className = 'call-line is-active';
callLine.textContent = `arr[${i}] → ${typeOfDisplay(el)} (${el.t})`;
caption.innerHTML = `<strong>arr[${i}]</strong> holds a <strong>${el.t}</strong> — arrays can mix types freely`;
}
function push(t) {
if (arr.length >= MAX) return;
let v;
if (t === 'number') v = Math.floor(Math.random() * 90) + 10;
else if (t === 'string') v = STRINGS[strCursor++ % STRINGS.length];
else v = BOOLS[Math.floor(Math.random() * 2)];
arr.push({ v, t });
selected = arr.length - 1;
render(true);
const el = arr[selected];
callLine.className = 'call-line is-active';
callLine.textContent = `arr.push(${typeOfDisplay(el)}) → length is now ${arr.length}`;
caption.innerHTML = `<strong>dynamic size</strong> — the array just grew to hold ${arr.length} elements`;
}
function pop() {
if (arr.length === 0) return;
const removed = arr.pop();
selected = null;
render(false);
callLine.className = 'call-line is-active';
callLine.textContent = `arr.pop() → removed ${typeOfDisplay(removed)}`;
caption.innerHTML = `<strong>dynamic size</strong> — the array just shrank to ${arr.length} elements`;
}
pushNum.addEventListener('click', () => push('number'));
pushStr.addEventListener('click', () => push('string'));
pushBool.addEventListener('click', () => push('boolean'));
popBtn.addEventListener('click', pop);
render(false);
})();
</script>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});⚡Why Use Arrays?
If you have a list of items (a list of car names, for example), storing the names in single variables could look like this:
let car1 = "Saab";
let car2 = "Volvo";
let car3 = "BMW";However, what if you want to loop through the cars and find a specific one? And what if you had not 3 cars, but 300?
The solution is an array!
An array can hold many values under a single name, and you can access the values by referring to an index number.
✅ Creating an Array using Literal
Creating an array using array literal involves using square brackets [ ] to define and initialize the array.
Syntax : const array_name = [item1, item2, ...];
const cars = ["Saab", "Volvo", "BMW"];
console.log(cars); //['Saab','Volvo','BMW']Spaces and line breaks are not important. A declaration can span multiple lines.
const cars = [
"Saab",
"Volvo",
"BMW"
];
console.log(cars); //['Saab','Volvo','BMW']You can also create an empty array, and provide elements later.
const cars = [];
cars[0]= "Saab";
cars[1]= "Volvo";
cars[2]= "BMW";
console.log(cars); //['Saab','Volvo','BMW']✅ Create using new Keyword (Constructor)
The "Array Constructor" refers to a method of creating arrays by invoking the Array constructor function.
let a = new Array(10, 20, 30);
console.log(a); //[ 10, 20, 30 ]