645 Stimmen

JavaScript variable Anzahl von Argumenten für die Funktion

Gibt es eine Möglichkeit, "unbegrenzt" vars für eine Funktion in JavaScript zu ermöglichen?

Exemple :

load(var1, var2, var3, var4, var5, etc...)
load(var1)

938voto

roufamatic Punkte 17707

Sicher, verwenden Sie einfach die arguments Objekt.

function foo() {
  for (var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}

341voto

Ramast Punkte 6137

In (den meisten) neueren Browsern können Sie mit dieser Syntax eine variable Anzahl von Argumenten akzeptieren:

function my_log(...args) {
     // args is an Array
     console.log(args);
     // You can pass this array as parameters to another function
     console.log(...args);
}

Hier ist ein kleines Beispiel:

function foo(x, ...args) {
  console.log(x, args, ...args, arguments);
}

foo('a', 'b', 'c', z='d')

=>

a
Array(3) [ "b", "c", "d" ]
b c d
Arguments
    0: "a"
    1: "b"
    2: "c"
    3: "d"
    length: 4

Dokumentation und weitere Beispiele hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters

124voto

Ken Punkte 73996

Eine andere Möglichkeit ist, die Argumente in einem Kontextobjekt zu übergeben.

function load(context)
{
    // do whatever with context.name, context.address, etc
}

und verwenden Sie es wie folgt

load({name:'Ken',address:'secret',unused:true})

Dies hat den Vorteil, dass Sie so viele benannte Argumente hinzufügen können, wie Sie wollen, und die Funktion kann sie nach eigenem Ermessen verwenden (oder auch nicht).

52voto

mbeasley Punkte 4714

Ich stimme Kens Antwort zu, da sie am dynamischsten ist, und ich möchte noch einen Schritt weiter gehen. Wenn es sich um eine Funktion handelt, die mehrmals mit unterschiedlichen Argumenten aufgerufen wird, verwende ich Kens Entwurf, füge dann aber Standardwerte hinzu:

function load(context) {

    var defaults = {
        parameter1: defaultValue1,
        parameter2: defaultValue2,
        ...
    };

    var context = extend(defaults, context);

    // do stuff
}

Wenn Sie viele Parameter haben, diese aber nicht unbedingt bei jedem Funktionsaufruf setzen müssen, können Sie auf diese Weise einfach die Nicht-Standardwerte angeben. Für die extend-Methode können Sie die extend-Methode von jQuery verwenden ( $.extend() ), basteln Sie Ihre eigenen oder verwenden Sie die folgenden:

function extend() {
    for (var i = 1; i < arguments.length; i++)
        for (var key in arguments[i])
            if (arguments[i].hasOwnProperty(key))
                arguments[0][key] = arguments[i][key];
    return arguments[0];
}

Dadurch wird das Kontextobjekt mit den Standardwerten zusammengeführt und alle nicht definierten Werte in Ihrem Objekt werden mit den Standardwerten gefüllt.

24voto

Nicola Pedretti Punkte 4278

Es ist vorzuziehen, die Syntax der Rest-Parameter zu verwenden, wie Ramast dargelegt hat.

function (a, b, ...args) {}

Ich möchte nur einige nette Eigenschaft der ...args Argument hinzufügen

  1. Es handelt sich um ein Array und nicht um ein Objekt wie Argumente. Dies ermöglicht es Ihnen, Funktionen wie map oder sort direkt anzuwenden.
  2. Sie umfasst nicht alle Parameter, sondern nur den, der von ihr weitergegeben wird. Z.B. Funktion (a, b, ...args) in diesem Fall enthält args Argument 3 bis arguments.length

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X