Esecuzione dei parametri richiesti utilizzando una chiamata di funzione come valore predefinito in JavaScript

4

ECMAScript 6 ha introdotto i parametri predefiniti . Il valore predefinito può essere qualsiasi espressione, quindi puoi usarlo per fare in modo che una funzione generi un errore quando non viene fornito un parametro:

const mandatory = (name) => {
  throw new Error('The ${name} parameter is mandatory');
};

const foo = (bar = mandatory('bar')) => {
  // some code
};

foo(42); // Works fine.
foo(); // Error: The bar parameter is mandatory

Quali sono i vantaggi e gli svantaggi di questo? È una buona pratica o un abuso dei parametri di default?

    
posta Michał Perłakowski 25.12.2016 - 09:12
fonte

1 risposta

5

Penso che tu stia abusando della funzionalità un po '.

Il punto dei parametri di default fornisce un valore che ha senso nel caso in cui le chiamate a questa funzione non abbiano un valore definito per quel parametro.

C'è una grande sovrapposizione tra non passare un valore definito e dimenticare un parametro obbligatorio, ma c'è una differenza: puoi passare undefined .

Il tuo codice verrà lanciato se la funzione viene chiamata con undefined :

const mandatory = (name) => {
  throw new Error('The ${name} parameter is mandatory');
};
const foo = (bar = mandatory('bar')) => {
  // some code
};
foo(undefined); // Error: The bar parameter is mandatory

In questo caso lamentarsi del fatto che il parametro sia obbligatorio è fuorviante, perché un parametro è stato effettivamente superato.

undefined potrebbe non essere un valore consentito, ma in questo caso dovresti controllare il valore e lamentarti del suo tipo.

Se vuoi solo controllare se un argomento è stato passato o meno, usare una funzione normale e controllare arguments.length può essere un'idea migliore.

Vedi ad esempio il comportamento di DOMParser#parseFromString , che a mio parere è più utile:

var p = new DOMParser();
p.parseFromString();                     // TypeError: Not enough arguments
p.parseFromString(undefined);            // TypeError: Not enough arguments
p.parseFromString(undefined, undefined); // TypeError: Argument 2 'undefined' is not a valid value
    
risposta data 25.12.2016 - 20:08
fonte

Leggi altre domande sui tag