Wie kann ich in JavaScript eine Funktion mit einem optionalen Parameter erstellen?
Lesezeit: 4 Minuten
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
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
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.
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:
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.
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
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.
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
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.
11764700cookie-checkWie kann ich in JavaScript eine Funktion mit einem optionalen Parameter erstellen?yes
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