379 Stimmen

Wie kann ich optionale Funktionsparameter in JavaScript deklarieren?

Kann ich Standardparameter deklarieren wie

function myFunc( a, b=0)
{
  // b is my optional parameter
}

in JavaScript?

652voto

Tigraine Punkte 22698

Mit ES6: Dies ist jetzt Teil der Sprache :

function myFunc(a, b = 0) {
   // function body
}

Bitte beachten Sie, dass ES6 die Werte gegen undefined und nicht gegen Wahrheitsgehalt (so dass nur echte undefinierte Werte den Standardwert erhalten - falsche Werte wie null werden nicht standardmäßig verwendet).


Mit ES5:

function myFunc(a,b) {
  b = b || 0;

  // b will be set either to b or to 0.
}

Dies funktioniert, solange alle Werte, die Sie explizit eingeben, wahrheitsgemäß . Werte, die nicht der Wahrheit entsprechen, wie in MiniGods Kommentar: null, undefined, 0, false, ''

Es ist ziemlich üblich, dass JavaScript-Bibliotheken eine Reihe von Prüfungen für optionale Eingaben durchführen, bevor die Funktion tatsächlich beginnt.

104voto

Ja͢ck Punkte 165747

Update

Mit ES6 ist dies auf genau die von Ihnen beschriebene Weise möglich; eine detaillierte Beschreibung finden Sie in die Dokumentation .

Alte Antwort

Standardparameter in JavaScript können hauptsächlich auf zwei Arten implementiert werden:

function myfunc(a, b)
{
    // use this if you specifically want to know if b was passed
    if (b === undefined) {
        // b was not passed
    }
    // use this if you know that a truthy value comparison will be enough
    if (b) {
        // b was passed and has truthy value
    } else {
        // b was not passed or has falsy value
    }
    // use this to set b to a default value (using truthy comparison)
    b = b || "default value";
}

Der Ausdruck b || "default value" wertet den Wert UND die Existenz von b und gibt den Wert von "default value" si b entweder nicht existiert oder fehlerhaft ist.

Alternative Erklärung:

function myfunc(a)
{
    var b;

    // use this to determine whether b was passed or not
    if (arguments.length == 1) {
        // b was not passed
    } else {
        b = arguments[1]; // take second argument
    }
}

Das besondere "Array" arguments ist innerhalb der Funktion verfügbar; sie enthält alle Argumente, beginnend mit dem Index 0 a N - 1 (wobei N ist die Anzahl der übergebenen Argumente).

Dies wird normalerweise verwendet, um eine unbekannte Anzahl optionaler Parameter (desselben Typs) zu unterstützen; die Angabe der erwarteten Argumente ist jedoch vorzuziehen!

Weitere Überlegungen

Obwohl undefined es nicht beschreibbar seit ES5 ist bekannt, dass einige Browser dies nicht erzwingen. Es gibt zwei Alternativen, die Sie verwenden können, wenn Sie darüber besorgt sind:

b === void 0;
typeof b === 'undefined'; // also works for undeclared variables

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