J'essaie de créer une variante du code suivant, mais je voudrais quand stdin == 0 continuer avec les invites et ne rompre que sur tous les autres cas !value.

Jusqu'à présent, j'ai réussi à le faire fonctionner lorsque stdin est une chaîne (pas unaire +) et avec la conversion Number(value) à la fin.

Le problème avec mes vérifications est que la valeur zéro et la valeur! Se transforment en faux, ce qui est le cas standard afaik. J'ai essayé avec les opérateurs ET, OU mais sans succès.

let sum = 0;

while(true) {
  
  let value = +prompt('Choose value:','');

  if ( !value ) break;
  
  sum += value;
}
0
csgeneralist 14 avril 2018 à 13:59

3 réponses

Meilleure réponse

value est un nombre, et les seuls nombres falsifiés sont 0 et NaN. Vous pouvez vérifier directement NaN:

if (isNaN(value)) break;

Gardez à l'esprit que +'' vaut 0 et non NaN, cependant. Il pourrait être plus approprié de sauvegarder la distribution pour plus tard. Il y a même la possibilité d'appliquer une validation plus stricte, excluant les entrées comme Infinity ou 1.2e3:

let sum = 0;

while (true) {
    const input = prompt('Choose value:');
    const value = Number(input);

    if (isNaN(value) || input === null || input.trim() === '') {
        break;
    }

    sum += value;
}
1
4 revs 14 avril 2018 à 11:26

Vous pouvez vérifier directement si la valeur est égale à zéro:

let sum = 0;

while(true) {
  let value = +prompt('Choose value:','');
  if ( value !== 0 && !value ) break;
  sum += value;
}

console.log(sum);
0
31piy 14 avril 2018 à 11:01

Vous pouvez utiliser une valeur par défaut de NaN pour obtenir une chaîne vide '' avant de convertir en nombre.

Vérifiez ensuite si la valeur n'est pas un nombre et rompez la boucle.

let sum = 0;

while(true) {
    let value = +(prompt('Choose value:').trim() || NaN);
    if (isNaN(value)) break;
    sum += value;
}

console.log(sum);
0
Nina Scholz 14 avril 2018 à 11:14