Du solltest benutzen undefined anstelle des optionalen Parameters, den Sie überspringen möchten, da dies zu 100% den Standardwert für optionale Parameter in JavaScript simuliert.
Kleines Beispiel:
myfunc(param);
//is equivalent to
myfunc(param, undefined, undefined, undefined);
Starke Empfehlung: Verwenden Sie JSON, wenn Sie viele Parameter haben, und Sie können optionale Parameter in der Mitte der Parameterliste haben. Schau dir an, wie das gemacht wird jQuery.
+1. Ich weiß nicht, was das genau macht (dasselbe wie undefined ?), aber es sieht sicher am besten aus, wenn Sie optionale Parameter überspringen.
– Thilo
2. Dezember 11 um 23:01 Uhr
Ich habe festgestellt, dass Sie nie sicher sein können, was anstelle des “übersprungenen” Parameters übergeben werden soll. Nicht definiert? Null? 0? Leerer String? Leeres Objekt? Array? Wenn das Verhalten des Weglassens des Parameters nicht dokumentiert ist oder es keinen Standardparameter gibt, sind Sie in großen Schwierigkeiten. Sie können nicht gut schlafen, wenn Sie die externe Bibliothek aktualisieren. Nur Gott und vielleicht Bibliotheksentwickler können wissen, was passiert, wenn Sie anstelle des erforderlichen Parameters etwas Unerwartetes übergeben. Wenn dieses Verhalten nicht dokumentiert ist, liegen die Fehler im Allgemeinen bei Ihnen
– Dan
3. April 13 um 18:09 Uhr
Dies funktioniert noch 2017 auf der neuesten Google Chrome-Version, also stimme ich zu.
– Anonym
30. März 17 um 10:29 Uhr
Hallo, das funktioniert gut, es sei denn, die Funktion verwendet arguments.length. Siehe dieses Beispiel: argl = function() { return arguments.length; } argl(1) => 1 argl(1, undefiniert, undefiniert) => 3 argl(1, undefiniert, 2) => 3
– MarekJ47
31. August 17 um 12:51 Uhr
Das npm-Modul oracledb macht starken Gebrauch von arguments.length. Meist um zu entscheiden, ob ein Rückruf erfolgt. Bedauerlicherweise, undefined ist keine Option zum Aufrufen dieser Methoden. Man muss ein einführen if um die richtige Länge der Parameterliste zu wählen wtf
– Newlukai
2. Mai 19 um 13:27 Uhr
Kurze Antwort
Die sicherste Wette ist undefined, und sollte fast allgegenwärtig funktionieren. Letztendlich können Sie die aufgerufene Funktion jedoch nicht dazu bringen zu glauben, dass Sie wirklich einen Parameter weggelassen haben.
Wenn Sie feststellen, dass Sie sich zur Verwendung neigen null nur weil es kürzer ist, sollten Sie eine Variable namens deklarieren _ als schöne Abkürzung für undefined:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
Einzelheiten
Erstens, wissen Sie, dass:
typeof undefined wertet zu "undefined"
typeof null wertet zu "object"
Nehmen wir also an, eine Funktion nimmt ein Argument an, von dem sie erwartet, dass es vom Typ ist "number". Wenn Sie zur Verfügung stellen null als Wert gibst du ihm ein "object". Die Semantik ist ausgeschaltet.1
Da Entwickler immer robusteren Javascript-Code schreiben, steigt die Wahrscheinlichkeit, dass die von Ihnen aufgerufenen Funktionen explizit den Wert eines Parameters überprüfen undefined im Gegensatz zum Klassiker if (aParam) {...}. Sie werden auf wackeligen Beinen stehen, wenn Sie es weiterhin verwenden null austauschbar mit undefined nur weil sie beide dazu zwingen false.
Beachten Sie jedoch, dass eine Funktion tatsächlich feststellen kann, ob ein Parameter tatsächlich weggelassen wurde (im Gegensatz zu einer Einstellung auf undefined):
f(undefined); // Second param omitted
function f(a, b) {
// Both a and b will evaluate to undefined when used in an expression
console.log(a); // undefined
console.log(b); // undefined
// But...
console.log("0" in arguments); // true
console.log("1" in arguments); // false
}
Fußnoten
Während undefined ist auch kein Typ "number", es ist seine ganze Aufgabe, ein Typ zu sein, der nicht wirklich ein Typ ist. Deshalb ist es der Wert, der von nicht initialisierten Variablen angenommen wird, und der Standardrückgabewert für Funktionen.
Yuriy Rozhovetskiy
Pass einfach null als Parameterwert.
Hinzugefügt: Sie können auch alle nachfolgenden optionalen Parameter nach dem letzten überspringen, den Sie als echten Wert übergeben möchten (in diesem Fall können Sie überspringen opt_timeoutInterval Parameter überhaupt)
Sind Sie ganz sicher, dass es keine ` === undefined` Prüfung gibt?
– Dan
2. Dezember 11 um 12:25 Uhr
@Dan, Sie haben Ihre Frage als generische JavaScript-Frage mit diesem Code als Beispiel formuliert. Wenn Sie Hilfe speziell zum Wie benötigen goog.net.XhrIo.send() funktioniert Bitte formulieren Sie die Frage um.
– nnnnn
2. Dezember 11 um 12:30 Uhr
Vielen Dank @nnnnnn, aber das ist wirklich ein generisch JavaScript-Frage und die Antwort sollten funktionieren beliebig Fall. Wenn es keine generische Lösung gibt, posten Sie sie bitte in Ihrer Antwort.
– Dan
2. Dezember 11 um 12:34 Uhr
@Dan, ich kann mir nicht sicher sein, wie Entwickler, die das implementieren goog.net.XhrIo.send Methodenprüfung auf optionale Parameter. Er kann nachsehen param === undefined oder typeof param === "undefined" oder param === null oder ereignisgerecht if(param). Aber wenn Sie einen Nullwert übergeben, ist dies ein Zeichen dafür, dass Sie erkennen, dass dieser Parameter optional ist, und sagen Sie ausdrücklich, dass Sie keinen Bedeutungswert übergeben möchten.
– Yuriy Rozhovetskiy
2. Dezember 11 um 12:41 Uhr
Sie könnten undefined anstelle von null übergeben, es könnte wahrscheinlicher sein, dass es in mehr Fällen funktioniert, aber ich bin mir nicht sicher, ob es eine Antwort gibt, die funktioniert beliebig Fall. Wenn ich eine Funktion mit optionalen Parametern schreiben würde, würde ich wahrscheinlich nachsehen ==null um undefined oder null zuzulassen (es sei denn, null ist aus irgendeinem Grund ein legitimer Wert), aber ich könnte die Länge von überprüfen arguments Objekt, und ich habe anderen Code gesehen, der überprüft hat ===null Also…
– nnnnn
2. Dezember 11 um 12:51 Uhr
.
5893600cookie-checkÜberspringen optionaler Funktionsparameter in JavaScriptyes