Wie kann ich in JavaScript eine Funktion mit einem optionalen Parameter erstellen?

Lesezeit: 4 Minuten

Benutzer-Avatar
SeanD

Frage: Was ist der richtige Weg, um eine Funktion in JavaScript zu definieren, die optionale Parameter akzeptiert?

Zum Beispiel:

function myFunc(optionVar1) {
    if(optionVar1 == undefined) {
        ...
    } else {
        ...
    }
}

myFunc('10');  // valid function call
myFunc();      // also a valid function call

Ist es richtig, a ? markieren Sie wie Ruby in der Funktionsdeklaration so, um optionale Parameter zu kennzeichnen:

function myFunc(optionVar1?) {...}  //  <--- notice the ? mark

  • Ich habe meine Antwort unten aktualisiert, aber die kurze Antwort lautet nein, das Fragezeichen ist kein zulässiges Zeichen für einen Variablennamen.

    – Damovisa

    9. Februar 2010 um 0:22 Uhr

Benutzer-Avatar
Cletus

Es gibt keine Syntax in Javascript, die angibt, dass ein Parameter optional (oder erforderlich) ist. Alle Parameter sind optional. Wenn sie nicht angegeben sind, sind sie es undefined das musst du also prüfen. Beispielsweise erstellt diese Funktion tatsächlich einen Standardwert von 10 für den Parameter:

function myfunc(someParam) {
  if (someParam === undefined) {
    someParam = 10;
  }
  ...
}

Sie können auch programmgesteuert auf die Parameter zugreifen, indem Sie verwenden arguments Eigentum.

Wenn Sie schließlich mehr als etwa 3-4 Parameter haben, ist es im Allgemeinen ratsam, stattdessen ein anonymes Objekt zu verwenden.

  • Dies kann in ES6 vereinfacht werden function myfunc(someParam = 10){All the code...}

    – Tim

    4. März 2017 um 0:46 Uhr


Benutzer-Avatar
JAL

Tatsächlich sind alle Parameter in JS-Funktionen optional. Es gibt keine Warnung oder Fehlermeldung, wenn Sie einen Parameter weglassen.

Sie können Standardeinstellungen wie festlegen

function throw_cat(dist){
  dist = typeof dist=='undefined' ? 20 : dist;
   //OR
  dist = dist || 20; //this will assign it to 20 if you pass 0 or another 'falsy' value, though. May be good if you expect a string. String '0' stays, '' or null assigns the default
  //etc...
  }

  • typeof gibt einen String zurück. Verwenden typeof dist==='undefined'oder, meine Präferenz, einfach dist===undefined.

    – Bobin

    9. Februar 2010 um 0:34 Uhr

  • Danke, da bin ich etwas unklar. In einigen Kontexten (dh außerhalb einer Funktion) tun if(randomvar==undefined) erzeugt einen Fehler – ReferenceError: randomvar is not defined also gehe ich mit typeof. Ich füge die Zitate hinzu.

    – JAL

    9. Februar 2010 um 1:12 Uhr


Sie können Anmerkungen wie {Object=} oder {number=} im Kommentarbereich verwenden, wenn Sie ein Doclet verwenden:

/** 
 * @param {object=}xyz
 */ 

Moderne IDE erkennt Annotationen für JavaScript und zeigt Ihnen Hinweise auf mögliche Probleme in Ihrem Code.

Beispiel:

/**
 *
 * @param query 
 * @param callback 
 * @param {number=} ttl optional time-to-leave
 */
 loadByJSONP:function loadByJSONP(query, callback, ttl) {
   ...do some work
 }

In diesem Beispiel ist ‘ttl’ optional. die Anmerkung {number=} zeigt der IDE an, dass dieser Parameter optional ist. Dementsprechend erhalten Sie keine Warnung, wenn Sie diese Funktion nur mit zwei Parametern aufrufen.

Anmerkungen können auch zum Bezeichnen des erwarteten Typs verwendet werden. Dadurch wird Ihr Code besser und weniger anfällig für Fehler. Hier der Link für Anmerkungen:

https://developers.google.com/closure/compiler/docs/js-for-compiler

  • warum funktioniert das bei mir nicht? * @param {string=} name optional time-to-leave Ich brauche das dringend, um zu funktionieren.

    – tatsu

    27. Juni 2018 um 8:48 Uhr

Benutzer-Avatar
netter Roboter

Erstens, alle, die JavaScript schreiben, tun sich selbst einen Gefallen und gehen durch Fortgeschrittenes JavaScript lernen aus Johannes Resig.

function myFunc(arg1, arg2 /* varargs... */) {
  var optional = Array.prototype.slice.call( arguments, 2 );

Jeder Parameter einer Funktion ist “optional”, auch diejenigen, die Sie in der Parameterliste der Funktionsdeklaration deklarieren.

Überlegen Sie einfach dokumentieren Sie gut.

Benutzer-Avatar
Damovisa

Die erste Google-Antwort, die ich entdeckte:

http://www.tipstrs.com/tip/354/Using-optional-parameters-in-Javascript-functions

Ich habe keine Fälle gesehen, in denen ein Fragezeichen verwendet wird, um einen Anrufer auf einen optionalen Parameter aufmerksam zu machen. Während es in anderen Sprachen gemacht wird, denke ich nicht, dass es in Javascript notwendig ist.

In der Tat, es scheint, dass Sie kippen Verwenden Sie ein Fragezeichen im Variablennamen. Nur Buchstaben, Zahlen, $ und _.

  • Artikel hilft leider nicht weiter.

    – SeanD

    9. Februar 2010 um 0:18 Uhr

  • Was für eine Schande. Was die Argumentdeklaration erlaubte, um anzugeben, welche Parameter erforderlich sind und welche nicht.

    – SeanD

    9. Februar 2010 um 0:24 Uhr

Benutzer-Avatar
Frank DeRosa

In einigen Quellen werden Sie aufgefordert, Parameter vollständig zu überspringen und stattdessen das Array arguments zu verwenden. Auf diese Weise können Sie alle Eingaben übernehmen, die für Ihre Funktion bereitgestellt werden, und Sie können entscheiden, wie Sie auf die an Ihre Funktion übergebenen Argumente reagieren, wenn Sie dies für richtig halten.

Hier kannst du mehr darüber lesen:
http://www.devguru.org/technologies/ecmascript/quickref/arguments.html

  • Artikel hilft leider nicht weiter.

    – SeanD

    9. Februar 2010 um 0:18 Uhr

  • Was für eine Schande. Was die Argumentdeklaration erlaubte, um anzugeben, welche Parameter erforderlich sind und welche nicht.

    – SeanD

    9. Februar 2010 um 0:24 Uhr

Benutzer-Avatar
Bryan Matthews

Cletus und Damovisa haben gute Vorschläge gemacht. Ich würde auch hinzufügen, dass einige (wie ich) eine Notation wie diese bevorzugen könnten:

function foo(/*bar*/) {
   if (arguments.length == 1) {
      var bar = arguments[0];
      ...
   }
}

Dies dient dazu, Entwicklern Ihrer Codebasis zu dokumentieren, dass das Argument optional ist, und dokumentiert auch den Namen, aber es verhindert auch, dass das Argument im Funktionsnamen in einem Debugger angezeigt wird (das Beispiel würde als foo() statt foo (optionales_argument). Andernfalls könnten Entwickler, die die API verwenden, davon ausgehen, dass sie erforderlich war.

Bearbeiten: Dies ist besonders nützlich für optionale Argumente, die intern verwendet werden sollen.

1176470cookie-checkWie kann ich in JavaScript eine Funktion mit einem optionalen Parameter erstellen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy