javascript - Array() vs new Array()
Vad är skillnaden (om det finns någon) mellan
x = Array()
och
x = new Array()
Vilken ska jag använda?
Svar #1
Specifikationen säger:
När
Arrayanropas som en funktion snarare än som en konstruktor, skapar och initierar den ett nytt Array-objekt. Därför är funktionsanropetArray(…)ekvivalent med objekt-skapande uttrycketnew Array(…)med samma argument.
Svar #2
Du bör använda den bokstavliga []. Skälen beskrivs här. Att använda Array()-konstruktorn kan vara tvetydigt, eftersom den accepterar antingen en length eller en lista med element:
new Array(5) // [ , , , , ]
new Array('5') // ['5']
[5] // [5]
['5'] // ['5']
Anledningen till att du kan använda Array utan new-operatorn är att den internt utför ett vanligt trick med konstruktörer:
function Thing(){
if (!(this instanceof Thing)){
return new Thing()
}
// ... define object
}
Det vill säga, om du anropar Thing() kommer det att anropa new Thing() åt dig.
Svar #3
Några fakta som är värda att nämna:
Array === Array.prototype.constructor //true
och
new Array() gör samma sak som new Array och [] också
Resultatet av att anropa en konstruktor är dock inte nödvändigtvis detsamma som att skapa en ny instans av ett objekt. Exempel:
Foo = function(){}
x = Foo() // undefined
y = new Foo // {}
Så x och y kan vara olika.
Men om objektet självt är en array kommer du enligt definition att få samma, som nämnts tidigare.
x = Array() // []
y = new Array // []
Även om du skickar ett heltal (som anger längden)
x = Array(3) // [empty × 3]
y = new Array(3) // [empty × 3]
eller ett icke-heltal (som talar om innehållet)
x = Array(true) // [true]
y = new Array(true) // [true]
eller fler parametrar (som anger innehållet)
x = Array(1,2,3) // [1,2,3]
y = new Array(1,2,3) // [1,2,3]
