2009-10-27 6 views
-2

J'ai deux variables, « a » et « b » dans mon JavaScript, et je veux les ajouter ensemble - je suppose que ce code:JS Vars - Ajout

var a = 10; 
var b = 30 
var varible = a + b; 

Cela met les deux numéros suivant à l'autre ... des idées pourquoi ... le résultat devrait être 40?

+0

Je suis étonné de voir comment quelqu'un a abaissé cette question. Était-ce parce qu'il y avait une erreur dans le code? Incroyable ... – Victor

+0

S'il vous plaît modifier votre code et renommer la variable "' new' ". Victor a raison, le code affiché comme exemple devrait être fonctionnel et ne pas introduire de nouvelles erreurs. – Boldewyn

+1

Parce que le problème qu'il rencontre ne peut pas être le résultat de ce code, même si le 'new' est corrigé. –

Répondre

4

Vous avez probablement des chaînes au lieu d'entiers. C'est votre code est vraiment comme ceci:

var a = "10"; 
var b = "30"; 
var c = a + b; // "1030" 

Il y a several ways pour convertir les chaînes en nombres entiers:

a = parseInt(a, 10); // Parse the string 
b = b * 1;   // Force interpretation as number 
+2

Attention en utilisant parseInt sans spécifier l'argument radix. –

2

new est un mot réservé, j'utiliserais autre chose dans tous les cas.

Et avec un nom de variable normale de c il a fonctionné pour moi:

var a = 10; 
var b = 30 
var c = a + b; 
alert(c); 

a fait l'attendu et alertés 40

+0

Le code qu'il a posté n'est évidemment pas ce qu'il utilise dans la vie réelle, car (la plupart?) Les interpréteurs JavaScript lanceront une erreur de syntaxe dans ce cas. En outre, une de ses variables contient probablement une chaîne. –

+2

Mais c'est l'erreur dans le code posté. Je ne peux pas encore lire le code non intégré, désolé. – Victor

0

Un ou deux est une chaîne. Si vous obtenez les valeurs d'une entrée HTML ou quelque chose, ils le sont définitivement. Assurez-vous que les deux sont des entiers en utilisant parseInt:

var newValue = parseInt(a,10) + parseInt(b,10); 

De plus, 'nouveau' est un mot-clé. Vous ne pouvez pas utiliser cela pour un nom de variable :)

+1

prudent en utilisant parseInt sans l'argument radix. Vous pouvez facilement avoir des ennuis, surtout s'il peut y avoir des zéros. –

1

new est un mot-clé dans JavaScript. vous ne devriez pas l'utiliser pour déclarer vos variables ou fonctions. changer le nom de la variable de nouveau à quelque chose d'autre

1

Êtes-vous sûr que vous ne faites pas:

var a = '30'; 
var b = '40'; 

Ici, je montre « 30 » comme une chaîne plutôt que d'un certain nombre, et je me attends Opérateur "+" pour concaténer deux chaînes. Comme il s'agit d'un code artificiel, il se peut que vous ne soyez pas tout à fait sûr de savoir où vos variables ont été attribuées initialement ou quel type elles ont. Vous pouvez le vérifier comme ceci:

var a = '30'; 
var b = '40'; 
alert(typeof(a) + '\n' + typeof(b)); 

Si l'un de ceux qui disent « objet » ou « chaîne » plutôt que « numéro » c'est votre problème. Une façon dont cela pourrait arriver que vous ne vous attendiez pas est avec une entrée. Supposons que vous avez du code comme ceci:

<input id="a" value="30" /> 
<input id="b" value="40" /> 
<script language="javascript"> 
    var a = document.getElementById('a').value; 
    var b = document.getElementById('b').value; 
</script> 

Ici, la valeur d'une entrée de texte est toujours une chaîne initialement.

Si vous souhaitez convertir une variable à un premier numéro, vous devez utiliser quelque chose comme myVar - 0-coerce une opération numérique ou les parseInt() ou parseFloat() plus formelle fonctions (ne pas oublier le paramètre radix pour parseInt()). Et vérifiez toujours isNaN() sur les résultats.

+0

+1 pourquoi les avoir abaissés? –

+0

Manque de solution. –

+0

Il n'a pas demandé de solution. Il a demandé le "pourquoi". C'est souvent beaucoup plus important. Vous savez peut-être déjà des choses que vous pouvez faire pour le réparer, mais vous voulez savoir pourquoi il est cassé afin que vous puissiez comprendre le problème et l'éviter complètement à l'avenir. Cela dit, j'ai ajouté des suggestions de solution au bas du message. –

1

Je suis vraiment surpris que personne n'ait jusqu'ici suggéré l'évidence: "Casting" avec JavaScript (je l'ai mis entre guillemets, parce que ce n'est pas un vrai casting).

var a = "1"; // string 
var b = Number(a); // number 
var c = String (b); // string again 

a + b; // "11" 
b + a; // 2 
a + c; // "11" 

Maintenant, pourquoi ce n'est pas un vrai casting?Parce que vous ne créez pas une nouvelle variable de type "number" mais un nouvel objet "Number" et l'initialisez avec quelque chose qui pourrait être numérique.

Questions connexes