Comprehensive Guide to Converting the arguments Object to an Array in JavaScript

Nov 24, 2025 · Programming · 10 views · 7.8

Keywords: JavaScript | arguments object | array conversion

Abstract: This article provides an in-depth exploration of various methods to convert the arguments object into a standard array in JavaScript, covering ES6 features like rest parameters and Array.from(), as well as traditional ES5 approaches using Array.prototype.slice.call(). Through detailed code examples and principle analysis, it helps developers understand the applicable scenarios and performance differences of different methods, offering practical guidance for handling variadic functions.

Nature and Limitations of the arguments Object

In JavaScript functions, the arguments object is a special array-like object that contains all the arguments passed to the function. Although the arguments object has a length property and the ability to access elements by index, it is not a true array instance, thus it cannot directly use methods from Array.prototype such as forEach, sort, filter, and map.

Modern Solutions in ES6

With the introduction of ECMAScript 6 (ES6), JavaScript provides more elegant ways to handle variable arguments.

Using Rest Parameters

The rest parameter syntax allows us to represent an indefinite number of arguments as an array:

function sortArgs(...args) {
  return args.sort(function(a, b) { return a - b; });
}

console.log(sortArgs(12, 4, 6, 8)); // Output: [4, 6, 8, 12]

Here, the ... operator (spread operator) automatically collects the passed arguments into the args array, allowing direct use of array methods.

Using Array.from() Method

The Array.from() method is specifically designed to convert array-like or iterable objects into true array instances:

function sortArgs() {
  return Array.from(arguments).sort(function(a, b) { return a - b; });
}

console.log(sortArgs(12, 4, 6, 8)); // Output: [4, 6, 8, 12]

Array.from() creates a new array by internally iterating over the elements of the arguments object, perfectly solving the issue with array-like objects.

Traditional Implementation in ES5

Before ES6, developers primarily relied on the Array.prototype.slice method for conversion.

Using Array.prototype.slice.call()

By calling the slice method with the this value set to the arguments object:

function sortArgs() {
  var args = Array.prototype.slice.call(arguments);
  return args.sort();
}

console.log(sortArgs(12, 4, 6, 8)); // Output: [12, 4, 6, 8]

This method works because the slice method is intentionally generic; it does not require its this value to be an array object, only that it has a length property.

Using Array Literal Shorthand

For code conciseness, the slice method can also be called using an array literal:

function sortArgs() {
  var args = [].slice.call(arguments);
  return args.sort();
}

console.log(sortArgs(12, 4, 6, 8)); // Output: [12, 4, 6, 8]

Although this notation is more concise, some consider it less explicit and potentially affecting code readability.

Method Comparison and Selection Recommendations

Rest parameters are the most recommended modern solution, with concise syntax, clear semantics, and no need for additional conversion steps.

Array.from() is suitable for scenarios requiring conversion of any array-like object to an array, offering more generic functionality.

Array.prototype.slice.call() is the standard approach in ES5 environments, with the best compatibility, though the code is relatively verbose.

In practical development, it is advised to prioritize rest parameters, and if the environment does not support ES6, consider Array.prototype.slice.call() as an alternative.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.