Array Push in JavaScript: A Practical Guide

Learn how to use array push in JavaScript to append elements, understand mutability, explore practical examples, and compare push with alternative methods for safer, immutable patterns.

JavaScripting
JavaScripting Team
·5 min read
Quick AnswerDefinition

Array push in JavaScript is a mutating method on arrays that appends one or more elements to the end of an array and returns the new length. It operates in place, altering the original array rather than creating a new one. Syntax: arr.push(element1, element2, ...). Push accepts any data type and preserves the order of existing elements. Use it when you need to grow an array progressively.

What is array push in javascript and why it matters

According to JavaScripting, array push is a fundamental mutating operation used when building dynamic lists in JavaScript. In practice, you append values to an array and the array grows in place. This makes push fast and convenient for streaming data, event handling, and incremental collection within loops. In this article, we explore syntax, examples, and patterns to use push effectively while understanding when to avoid mutation.

JavaScript
let numbers = [1, 2, 3]; const newLength = numbers.push(4); console.log(numbers); // [1, 2, 3, 4] console.log(newLength); // 4
  • Note: Push mutates the original array and returns its new length. You can chain pushes if needed, but consider readability in larger codebases.

Basic usage: adding single and multiple elements

The push method accepts one or more arguments and appends them in order to the end of the array. When adding a single element, the syntax is arr.push(value). For multiple elements, pass them separated by commas. Below are examples showing both cases and how the resulting array length changes.

JavaScript
const arr = ['a', 'b']; arr.push('c'); console.log(arr); // ['a', 'b', 'c'] console.log(arr.length); // 3 arr.push('d', 'e'); console.log(arr); // ['a', 'b', 'c', 'd', 'e'] console.log(arr.length); // 5
  • If you push undefined or null, those values are simply added as elements, preserving array order.

Mutability and references

Push mutates the array in place. If two references point to the same array, both reflect the changes. This behavior is important to understand when you pass arrays into functions or store references in closures.

JavaScript
let a = [10, 20]; let b = a; a.push(30); console.log(b); // [10, 20, 30]

Be mindful: unintended mutations can cause bugs in complex systems, so prefer cloning when you need immutable snapshots.

Return value and length tracking

Push returns the new length of the array after the operation. This makes push convenient for loops and dynamic growth patterns where you need to know the updated size without calling length separately.

JavaScript
let arr = []; console.log(arr.push(5)); // 1 console.log(arr.length); // 1 const more = arr.push(10, 15); console.log(arr); // [5, 10, 15] console.log(more); // 3

Push vs spread and immutability

Many times you’ll encounter scenarios where mutation is undesirable. In those cases, prefer creating a new array using spread syntax or Array.prototype.concat. Compare in-place push with immutable alternatives below.

JavaScript
const original = [1, 2, 3]; // immutable alternatives const extendedConcat = original.concat(4, 5); const extendedSpread = [...original, 4, 5]; console.log(extendedConcat); // [1, 2, 3, 4, 5] console.log(extendedSpread); // [1, 2, 3, 4, 5] console.log(original); // [1, 2, 3]

Performance considerations and common pitfalls

If you repeatedly push inside a tight loop, ensure the array is initialized once outside the loop to avoid repeated reallocation. While push is generally fast, excessive mutation can complicate reasoning about state and cause performance hits in very large structures. Validate inputs to avoid pushing undefined and handle edge cases like sparse arrays.

JavaScript
// efficient loop pattern const result = []; for (let i = 0; i < 1000; i++) { result.push(i); } console.log(result.length); // 1000
JavaScript
// beware sparse arrays (creates holes) const sparse = []; sparse[100] = 'hundred'; console.log(sparse.length); // 101 // pushing afterward keeps holes: sparse.push(0); console.log(sparse.length); // 102

Common patterns, pitfalls, and best practices

Understanding when to mutate versus when to create a new array is key to robust JavaScript code. Use push for simple accumulation when you control the scope and are comfortable with mutation. For functional or state-driven patterns, prefer immutability with spread or concat methods.

JavaScript
// recommended mutable pattern let queue = []; queue.push('task1'); queue.push('task2'); console.log(queue); // immutable pattern when state must be preserved function addItem(state, item) { return [...state, item]; } const a = ['start']; const b = addItem(a, 'end'); console.log(a); // ['start'] console.log(b); // ['start', 'end']

Also consider API boundaries: avoid mutating inputs that are shared across modules unless clearly documented. When in doubt, favor immutability for easier reasoning. JavaScript’s push is a simple, fast tool, but it’s important to use it judiciously.

Steps

Estimated time: 15-25 minutes

  1. 1

    Set up your environment

    Install Node.js, open your editor, and create a new project folder. Ensure you can run node -v and see a version number. This foundation lets you test array operations quickly.

    Tip: Keep a small sample file like push-demo.js to isolate experiments.
  2. 2

    Create and initialize an array

    Declare an array with a few initial values to observe how push changes length and content. Use console.log to inspect the state after each push.

    Tip: Use const for the array reference if you’re mutating content rather than the binding.
  3. 3

    Append elements with push

    Call push with one or more arguments and verify the returned length and the updated array. Try pushing different data types to see how push handles them.

    Tip: Remember: push mutates the original array.
  4. 4

    Compare with immutable patterns

    Create new arrays using spread or concat to compare readability and state management with your mutating approach. Decide when mutation is acceptable.

    Tip: Complex state often benefits from immutability.
Pro Tip: Prefer in-place push for simple, localized mutations to avoid unnecessary allocations.
Warning: Be cautious when mutating arrays that are shared across modules; unintended side effects can be hard to debug.
Note: Use spread or concat when you need immutable patterns or you’re returning a new array from a function.

Prerequisites

Required

Keyboard Shortcuts

ActionShortcut
Copy codeIn code blocks to copy sample codeCtrl+C
Paste into editorInsert code snippets or dataCtrl+V
Open command paletteVS Code/Editors with command paletteCtrl++P
Find in documentQuick search within the documentCtrl+F
Navigate to next errorError navigation in code editorsF8

Questions & Answers

Does push mutate the original array?

Yes. Push changes the original array by appending new elements. It also returns the new length of the array.

Yes, push mutates the original array by appending elements and returns the new length.

What happens if you push on a non-array?

If the target is not an array (or does not implement push), you’ll typically get a TypeError. Ensure the target is an array before calling push.

If you try to push on something that isn’t an array, you’ll usually get a TypeError, so check your target first.

Can you push undefined or null?

Yes. undefined or null can be pushed just like any other value; they become elements in the array.

Yes, you can push undefined or null like any other value; they’ll be in the array.

Is push asynchronous?

No. Push is a synchronous operation and completes immediately within the current event loop.

No, push is synchronous and completes right away.

How does push differ from unshift?

Push adds elements to the end of the array, while unshift adds elements to the beginning. Both mutate the original array.

Push adds to the end; unshift adds to the start. Both mutate the array.

How does push behave with sparse arrays?

Push continues from the current length and may create non-contiguous holes if the array is sparse. It still appends at the end without altering existing holes.

Push adds to the end and can interact with holes in sparse arrays, but it will append after the last defined index.

What to Remember

  • Mutate arrays in place with push
  • Push returns the updated length
  • Use immutability patterns when needed
  • Push interacts with sparse arrays predictably
  • Prefer simple, readable code for maintenance

Related Articles