Sortie inattendue en javascript

Je suis débutant en javascript et je reçois une sortie inattendue

Voici le code

<script type="text/javascript"> function add(a,b) { x = a+b; return x; } var num1 = prompt("what is your no."); var num2 = prompt("what is another no.") alert(add(num1,num2)); </script> 

Il devrait donner la sortie en tant que somme de deux nombres saisis par nous lors de l'incitation, mais il s'agit simplement de concaténer les deux nombres et d'afficher la sortie

C'est parce que la fonction d' prompt renvoie une String et non un Number . Donc, ce que vous faites actuellement, c'est de demander 2 cordes et de les concaténer. Si vous souhaitez ajouter les deux nombres ensemble, vous devrez convertir les chaînes en chiffres:

 var num1 = parseFloat(prompt("what is your no.")); var num2 = parseFloat(prompt("what is another no.")); 

Ou plus simple:

 var num1 = +prompt("what is your no."); var num2 = +prompt("what is another no."); 

prompt renvoie une chaîne, pas un numéro. + Est utilisé à la fois comme opérateur d'addition et de concaténation . Utilisez parseInt pour transformer les chaînes en nombres à l'aide d'une base spécifique (base de numéros) ou parseFloat si elles sont censées avoir une partie fractionnée ( parseFloat ne fonctionne que en décimale). Par exemple:

 var num1 = parseInt(prompt("what is your no."), 10); // radix -----^ 

ou

 var num1 = parseFloat(prompt("what is your no.")); 

Lorsque vous demandez à l'utilisateur, la valeur de retour est une chaîne, un texte normal.

Vous devez convertir les chaînes en nombre:

 alert(add(parseInt(num1), parseInt(num2)); 

La valeur de retour d' prompt est une chaîne. Ainsi, votre fonction d' add effectue l'opérateur + sur 2 chaînes, les concaténant ainsi. Convertissez vos entrées en int abord pour obtenir le résultat correct.

  function add(a,b) { x = parseInt( a ) + parseInt( b ); return x; } 

En plus des réponses déjà fournies: si vous utilisez parseInt () / parseFloat (), assurez-vous de vérifier si l'entrée en fait était un nombre entier ou flottant valide:

 function promptForFloat(caption) { while (true) { var f = parseFloat(prompt(caption)); if (isNaN(f)) { alert('Please insert a valid number!'); } else { return f; } } } var num1 = promptForFloat('what is your no.'); // ...