Javascript réduit un tableau vide

Lorsque je réduis le tableau, j’essaie d’obtenir le nombre zéro, mais je ne comprends pas clairement le comportement de la fonction

[].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }); 

résultat

 TypeError: Reduce of empty array with no initial value 

semble que si le tableau est vide, je ne peux pas le réduire

 [""].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }); 

résultat

 "" 

Si le seul élément du tableau est une chaîne vide, récupère une chaîne vide

Le second paramètre concerne la valeur initiale.

 [].reduce(function(previousValue, currentValue){ return Number(previousValue) + Number(currentValue); }, 0); 

ou en utilisant ES6:

 [].reduce( (previousValue, currentValue) => previousValue + currentValue, 0); 

Les deux comportements sont conformes aux spécifications .

Vous ne pouvez pas reduce un tableau vide à moins que vous ne fournissiez explicitement une valeur initiale “accumulée” comme second argument:

Si initialValue n’a pas été fourni, alors previousValue sera égal à la première valeur du tableau et currentValue sera égal à la seconde. C’est un TypeError si le tableau ne contient aucun élément et que initialValue n’est pas fourni.

Si le tableau a au moins un élément, fournir une valeur initiale est facultatif. Toutefois, si aucun n’est fourni, le premier élément du tableau est utilisé en tant que valeur initiale et la reduce continue à traiter le rest des éléments du tableau en appelant votre rappel. Dans votre cas, le tableau ne contient qu’un seul élément, de sorte que cet élément devient la valeur initiale et également la valeur finale, car il n’y a plus d’éléments à traiter dans le rappel.