web-dev-qa-db-fra.com

Fonction JavaScript avec paramètres optionnels

Je suis nouveau sur JavaScript venant de fond Python. En Python, les paramètres peuvent être passés en tant que clé et valeur en tant que telle:

def printinfo( name, age = 35 ):
   print "Name: ", name
   print "Age ", age
   return;

Ensuite, la fonction pourrait être appelée comme telle:

printinfo( age=50, name="miki" )
printinfo( name="miki" )

De tels paramètres peuvent-ils passer des fonctions JavaScript?

Je veux pouvoir passer un ou plusieurs paramètres. Par exemple, une fonction JavaScript en tant que telle:

function plotChart(data, xlabel, ylabel, chart_type="l"){
    ...
} 

Je souhaite pouvoir transmettre uniquement les données. Le type de graphique et les étiquettes sont facultatifs, tels que:

plotChart(data, chart_type="pie")

Est-ce possible avec JavaScript?

5
codeBarer

Un bon moyen de le faire serait d'utiliser un objet pour tous les arguments. Quelque chose comme:

function plotChart(options) {
  // Set defaults
  options.chart_type = options.chart_type || '1';

  // Check if each required option is set
  // Whatever is used by the data
}

Puis quand la fonction est appelée:

plotChart({
  data: 'some data',
  xlabel: 'some xlabel',
  ylabel: 'some ylabel',
  chart_type: '5' // This is optional
});
11
Sam

Une solution consiste à vérifier si la valeur du paramètre est undefined et, dans l'affirmative, attribuez une valeur.

function plotChart(data, xlabel, ylabel, chart_type) {
  if (typeof chart_type === 'undefined') {
     chart_type = 'l';
  }
} 

EcmaScript 2016 (ES6) propose également Paramètres par défaut . Certains navigateurs ne supportant pas encore cette fonctionnalité, vous pouvez utiliser un transpiler tel que babel pour convertir le code en ES5.

Pour que cela fonctionne comme dans votre exemple Python, vous devez passer un objet contenant les valeurs à la place de paramètres individuels.

function plotChart(options) {
    var data = options.data;
    var xlabel = options.xlabel;
    var ylabel = options.ylabel;
    var chart_type = (typeof options.chart_type === 'undefined' ? 'l' : options.chart_type);
}

Exemple d'utilisation

plotChart({
  xlabel: 'my label',
  chart_type: 'pie'
});
6
Miguel Mota

Il y a déjà une tonne de réponses à cela, mais je n'ai pas vu ce que je considérais être la solution la plus simple.

var myFunc = function(param1) {
    var someData = param1 || "defaultValue";
}
3
Sinistralis

Vous pouvez vérifier si les paramètres sont définis et codés en dur dans vos fonctions.

par exemple.

 var preDefined = function(param) { 
    if(param === undefined) { 
        param = preDefinedValue
     }
     /* Rest of code goes here */
 }

ETA:

ES6 autorise les valeurs de paramètre par défaut (je ne le savais pas lorsque j'ai posté la réponse).

Lien

1
Mike