Since it seems like the first thing people do is convert arguments
into a real array, I'm interested in why the Javascript language authors and implementers decided, and continue to think, that arguments
should not be a real Array
. I don't mean this as flamebait, I'm sincerely interested in the thinking behind it. Since the function is naturally being called when you're in its body, I don't think it's because the objects arguments
are referencing can change, like with some of the DOM results...
The arguments object is a local variable available within all non-arrow functions. You can refer to a function's arguments inside that function by using its arguments object. It has entries for each argument the function was called with, with the first entry's index at 0 . The arguments object is not an Array .
The Array object lets you store multiple values in a single variable. It stores a fixed-size sequential collection of elements of the same type.
Method 1: Using the apply() method: The apply() method is used to call a function with the given arguments as an array or array-like object. It contains two parameters. The this value provides a call to the function and the arguments array contains the array of arguments to be passed.
Object. values( ) will return the values of an object as an array, and since arguments is an object, it will essentially convert arguments into an array, thus providing you with all of an array's helper functions such as map , forEach , filter , etc.
My conjecture:
The concept of the arguments
object has been on the language since the very beginning, it's even described in the ECMAScript First Edition Standard(PDF).
In that version of ECMAScript, the Array.prototype
was really basic, array objects contained only 4 methods!: toString
, join
, reverse
and sort
.
I think that's one of the major reasons about they make arguments
to inherit from Object.prototype
, at that time those Array methods didn't look too useful.
But the Array.prototype
object was extended in the next versions of the standard, now on ES5, Array objects have methods such as map
, reduce
, every
, some
, etc, that are really powerful.
The last year, there was a proposal in ES5 to make arguments
inherit from Array.prototype
, in the draft stages of the standard, but was dropped off time later.
In those drafts, arguments
inherited from Array.prototype
, but for backwards compatibility with ES3, the arguments
object had defined two own properties, toString
and toLocaleString
, both pointing to the same methods on Object.prototype
, but finally, the committee decided to keep inheriting from Object.prototype
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With