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 Array anropas som en funktion snarare än som en konstruktor, skapar och initierar den ett nytt Array-objekt. Därför är funktionsanropet Array(…) ekvivalent med objekt-skapande uttrycket new 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]

Relaterade artiklar