2016-12-04 3 views
0

Muss ich null als Argument für optionale Parameter übergeben?Muss ich NULL als Argument für optionale Parameter in Javascript Funktionen/Methoden übergeben?

Ein Beispiel I-Code von der Mungo-Dokumentation enthalten sind:

Model.find(conditions, [projection], [options], [callback]) 

// Example use 
// passing options and executing immediately 
MyModel.find({ name: /john/i }, null, { skip: 10 }, function (err, docs) {}); 

ich diese Methode und andere ähnliche Verfahren ohne null vorbei als zweites Argument erfolgreich verwendet worden, aber ich würde, wenn diese wissen, Wird mich die Straße in Schwierigkeiten bringen?

Ich habe einige verwandte Fragen gefunden, aber sie scheinen nicht spezifisch für optionale Parameter zu sein. Jede Einsicht wird sehr geschätzt.

Antwort

2

Es hängt davon ab, wie die Funktion geschrieben wird.

Nehmen Sie diese Funktion zum Beispiel:

function repeat(value, times) { 
 
    if (arguments.length === 0) { 
 
    value = "Hello!"; 
 
    times = 2; 
 
    } else if (arguments.length === 1) { 
 
    if (typeof value === "number") { 
 
     times = value; 
 
     value = "Hello!"; 
 
    } else { 
 
     times = 2; 
 
    } 
 
    } 
 
    var output = ""; 
 
    for (var i = 0; i < times; i++) { 
 
    output += value + " "; 
 
    } 
 
    return output; 
 
} 
 

 
console.log(repeat()); 
 
console.log(repeat("Yo!")); 
 
console.log(repeat(5)); 
 
console.log(repeat("Yo Yo!", 3));

Die Argumente es erwartet ausreichend verschieden sind (in diesem Fall ein eine Zeichenfolge ist und eine eine Zahl ist), dass es zu testen, um zu sehen wenn das "erste" Argument weggelassen wird, selbst wenn das "zweite" Argument geliefert wird.


Die Dokumentation, die Sie sagt, zur Verfügung gestellt:

Model.find(conditions, [projection], [options], [callback]) 

Jede der letzten drei Argumente als unabhängig optional gezeigt wird, was darauf hindeutet, dass Sie einer von ihnen auslassen können und liefern nach wie vor diejenigen, das folgt.

vergleichen the MDN documentation for JSON.stringify:

JSON.stringify(value[, replacer[, space]]) 

Das dritte Argument [] hat um ihn herum ist es optional, um anzuzeigen, aber es ist innen die [] um die Sekunden Argument. Dies bedeutet, dass Sie das dritte Argument nur angeben können, wenn das zweite Argument angegeben ist.

+0

Genau das habe ich gesucht. – Cheesus

+0

Wenn Sie Ihre Antwort hinzufügen, können Sie in ES6 das Destrukturieren verwenden, um den 'arguments' Aufruf zu vermeiden und den Code etwas sauberer zu machen. – GMaiolo

+0

Es stellt sich heraus, dass nicht Null übergeben, da das Projektionsargument mein Server zum Absturz brachte, weil mein Optionsobjekt als eine Projektion interpretiert wurde, also bin ich mir nicht sicher, was ich denken soll. – Cheesus

-1

können Sie den Query Builder verwenden

Model 
      .find({ name: /john/i }) 
      .skip(10) 
      .exec(callback) 
+0

ich das Feedback zu schätzen wissen, und ich weiß, dass ich den Query Builder verwenden können, aber meine Frage ist, ob oder nicht, dass ich null angeben muss, wenn ich bin Auslassen eines optionalen Parameters, der vor einem anderen optionalen Parameter steht, den ich verwende. – Cheesus

0

Quentins Antwort ist richtig, ich möchte nur hinzufügen, dass in ES6 Sie das durch destructuring parameters vermeiden können.

Ich gebe Ihnen ein Beispiel:

let str= "Something"; 
let num = 10; 

doSomething({ str, num }); 

function doSomething({ somethingElse, num, str }) { 
    /* the argument gets passed like 
    { 
     somethingElse: somethingElse, 
     num: num, 
     str: str 
    } 
    and if any value is missing then it is null, so you can check for 
    each property's existance easily 
    */ 
} 
+0

Ich habe gerade erst von Destrukturierung erfahren, aber noch nicht den praktischen Nutzen gesehen. Danke für das Beispiel. – Cheesus

+0

Eigentlich ist die Verwendung, nach der Sie gefragt haben, seine genaue praktische Verwendung, es ist die sauberste Methode, um 'foo (null, null, null, null, null," finallySomeValue ") zu vermeiden (obwohl ich würde Liebe für JS zu überladen, Destrukturierung ist ziemlich nett zu haben). Sie sollten ES6 ausprobieren, da es viele dieser kleinen Dinge gibt, die von Zeit zu Zeit nützlich sind. – GMaiolo

Verwandte Themen