What is the difference (if there is any) between
x = Array()
and
x = new Array()
Which one should I use?
What is the difference (if there is any) between
x = Array()
and
x = new Array()
Which one should I use?
The spec says:
When
Array
is called as a function rather than as a constructor, it creates and initialises a new Array object. Thus the function callArray(…)
is equivalent to the object creation expressionnew Array(…)
with the same arguments.
You should use the literal []
. Reasons are outlined here. Using the Array()
constructor can be ambiguous, since it accepts either a length
or a list of elements:
new Array(5) // [ , , , , ]
new Array('5') // ['5']
[5] // [5]
['5'] // ['5']
The reason you can use Array
without the new
operator is that internally it does a common trick with constructors:
function Thing(){
if (!(this instanceof Thing)){
return new Thing()
}
// ... define object
}
That is, if you call Thing()
it will call new Thing()
for you.
new Array(5)
gives [,,,,]
–
Daugavpils Array.of
: "Array.of(7) creates an array with a single element, 7, whereas Array(7) creates an empty array with a length property of 7" –
Complainant Some facts that worth to mention:
Array === Array.prototype.constructor //true
and
new Array()
does the same as new Array
and []
as well
However, the result of calling a constructor is not necessarily equivalent to creating a new instance of an object. Example:
Foo = function(){}
x = Foo() // undefined
y = new Foo // {}
So x and y can be different.
But if the Object itself is an Array you will get the same by definition, as mentioned earlier.
x = Array() // []
y = new Array // []
Even if you pass one integer (telling the length)
x = Array(3) // [empty × 3]
y = new Array(3) // [empty × 3]
or one non integer (telling the content)
x = Array(true) // [true]
y = new Array(true) // [true]
or more parameters (telling the content)
x = Array(1,2,3) // [1,2,3]
y = new Array(1,2,3) // [1,2,3]
[]
being the same as Array
and new Array
is not true am afraid. Read more here: stackoverflow.com/questions/931872/… –
Talkathon Array
is native), try: {a:new Array,b:new Array(),c:[]}
–
Uncommonly []
takes some shortcuts and internally does not execute some code that constructor does. If you don't care about performance or other edge case issues, sure, use whichever. If you do care though, you should know about differences, cause there are some. So what am saying is 'yes' you will get empty array in each case, but 'no' it s not going to be the same structurally/internally. –
Talkathon Array === Array.prototype.constructor
evaluates to true
is completely uninteresting and holds for 99% of all JavaScript functions. –
Loriloria © 2022 - 2024 — McMap. All rights reserved.