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;
}
3 réponses
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;
}
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);
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);