Überspringen optionaler Funktionsparameter in JavaScript

Lesezeit: 5 Minuten

Könnten Sie mich bitte auf die nette Art hinweisen, optionale Parameter in JavaScript zu überspringen.

Zum Beispiel möchte ich alles wegwerfen opt_ Parameter hier:

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)

Uberspringen optionaler Funktionsparameter in JavaScript
Dan

Lösung:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})

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

  1. 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.

Uberspringen optionaler Funktionsparameter in JavaScript
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


.

589360cookie-checkÜberspringen optionaler Funktionsparameter in JavaScript

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

Privacy policy