arguments
objekt er et array-lignende objekt, der er tilgængeligt i alle ikke-pile-funktioner, og som repræsenterer værdierne af de argumenter, der sendes til den pågældende funktion. Du kan bruge numeriske indekser til at få adgang til værdier af argumenter fra arguments
objekt. For eksempel kan det første argument tilgås som arguments[0]
, kan det andet argument tilgås som arguments[1]
, og så videre.
Du kan se arguments
objekt er meget som et array, men det er ikke et egentligt array. Selvom den har length
egenskab, kan du ikke bruge de almindelige array-metoder som map()
, slice()
og filter()
på den.
For at konvertere en arguments
objekt til en ægte Array
objekt, er der flere tilgængelige måder, som vi vil diskutere nedenfor.
Hvileparametre
Restparametersyntaksen blev introduceret i ES6, der giver os mulighed for at repræsentere et uspecificeret antal argumenter som et array. For at bruge hvileparametre kan du præfikse funktionens sidste parameter med ...
(spredningsoperatør). Det vil konvertere alle resterende brugerleverede argumenter til et standard JavaScript-array.
Da resten parameter er en rigtig Array
instans, i modsætning til arguments
objekt, behøver du ikke udføre nogen konvertering:
const sort = (...numbers) => {
return numbers.sort((a, b) => a - b);
};
sort(1, 4, 5, 2);
// [ 1, 2, 4, 5 ]
Array.from()
En anden måde at konvertere arguments
på objekt til et array i ES6 er ved at bruge Array.from() metoden. Denne metode konverterer et array-lignende eller et iterabelt objekt til en Array
eksempel:
function sort() {
return Array.from(arguments).sort((a, b) => a - b);
}
sort(1, 4, 5, 2);
// [ 1, 2, 4, 5 ]
Array.prototype.slice()
Endelig den sidste metode til at konvertere en arguments
objekt til et array er ved at bruge Array.prototype.slice()
metode. Meget ligesom at konvertere en NodeList til en matrix, Array
's slice()
metoden bruger arguments
objekt og transformerer det til et ægte array:
function sort() {
const args = Array.prototype.slice.call(arguments);
return args.sort((a, b) => a - b);
}
const sorted = sort(1, 4, 5, 2);
console.log(sorted);
// [ 1, 2, 4, 5 ]
Du kan også bruge en kortfattet form af slice()
metode:
const args = [].slice.call(arguments);
Array.prototype.slice.call()
virker i alle moderne og gamle browsere inklusive IE 6+. Du bør bruge denne tilgang, hvis du vil understøtte gamle browsere.
Hvis du vil vide mere om JavaScript-arrays, og hvordan du bruger dem til at gemme flere stykker information i en enkelt variabel, kan du tage et kig på denne vejledning.