J'ai besoin de javascript pour ajouter 5 à une variable entière, mais à la place, il traite la variable comme une chaîne, donc il écrit la variable, puis ajoute 5 à la fin de la "chaîne". Comment puis-je le forcer à faire des maths à la place?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Production: 55
Comment puis-je le forcer à sortir 10
?
#control
faire une différence sur votre problème? Sinon, supprimez-les et ne nous les montrez pas. Continuez à réduire votre code jusqu'à ce que vous disposiez du scénario de test minimum absolu nécessaire pour reproduire votre problème. La plupart du temps, cela vous amènera à trouver le problème et à apprendre dans le processus. Si vous ne le résolvez pas vous-même, vous obtiendrez probablement une aide rapide avec votre exemple simple.Réponses:
Vous avez la ligne
dans votre fichier, cela définira les points comme une chaîne car le contenu de txt n'est pas limité à un nombre.
pour le convertir en int, changez la ligne en:
Remarque:
10
ici spécifie décimal (base-10). Sans cela, certains navigateurs peuvent ne pas interpréter correctement la chaîne. Voir MDN:parseInt
.la source
le plus simple:
les points seront convertis en nombre.
la source
dots = +dots+5
.N'OUBLIEZ PAS - À utiliser
parseFloat();
si vous traitez avec des décimales.la source
Number
.J'ajoute cette réponse parce que je ne la vois pas ici.
Une façon est de mettre un caractère «+» devant la valeur
exemple:
x === 15
J'ai trouvé que c'était le moyen le plus simple
Dans ce cas, la ligne:
pourrait être changé en
pour le forcer à un nombre
REMARQUE:
la source
parseInt()
devrait faire l'affaireVous donne
http://www.w3schools.com/jsref/jsref_parseint.asp
Remarque: le
10
inparseInt(number, 10)
spécifie décimal (base-10). Sans cela, certains navigateurs peuvent ne pas interpréter correctement la chaîne. Voir MDN:parseInt
.la source
Cela fonctionne également pour vous:
la source
c'est vraiment simple juste
cela oblige javascript à se multiplier car il n'y a pas de confusion pour * sign in javascript.
la source
Vous pouvez ajouter + derrière la variable et cela la forcera à être un entier
la source
Après avoir essayé la plupart des réponses ici sans succès pour mon cas particulier, j'ai trouvé ceci:
Les signes + sont ce qui confond js, et cela les élimine complètement. Simple à mettre en œuvre, même s'il est potentiellement déroutant à comprendre.
la source
MIS À JOUR depuis le dernier vote négatif ...
Je n'ai vu que la portion
avant, mais on m'a montré plus tard que la
txt
boîte alimente la variabledots
. Pour cette raison, vous devrez être sûr de "nettoyer" l'entrée, pour être sûr qu'elle ne contient que des entiers et non du code malveillant.Un moyen simple de le faire est d'analyser la zone de texte avec un
onkeyup()
événement pour s'assurer qu'elle contient des caractères numériques:où l'événement donnerait une erreur et effacerait le dernier caractère si la valeur n'est pas un nombre:
De toute évidence, vous pouvez le faire avec regex, mais j'ai choisi la voie paresseuse.
Depuis lors, vous sauriez que seuls les nombres peuvent être dans la boîte, vous devriez pouvoir simplement utiliser
eval()
:la source
eval()
est dangereux s'ildots
provient d'une entrée utilisateur, en particulier s'il s'agit d'une entrée stockée. Plus d'informationsdots
était une variable définie qui était incrémentée et qui était juste confondue avec une chaîne. Je vais donc nuancer ma réponse selon laquelle il ne devrait pas être utilisé à la légère, comme vous l'avez dit, à partir d'une entrée utilisateur / stockée qui pourrait avoir le potentiel d'injection de script maléfique. Mais aussi dans ce cas, une telle injection provoquerait de toute façon une erreur / exception mathématique, donc ça ne ferait vraiment rien, de toute façon.eval()
c'est si dangereux, vous devez regarder le code dans le contexte utilisé par l'OP. Ce n'est pas, dans ce cas, parce qu'il utilise une entrée qui ne provient pas d'une zone de texte ou de toute autre forme d'entrée utilisateur où il pourrait y avoir n'importe quelle forme d'injection d'une valeur non numérique! J'aurais aimé pouvoir voter contre vos votes négatifs!eval()
tout va bien, et vous devez regarder le contexte dans lequel il est utilisé, au lieu de simplement croire aveuglément tout ce que vous lisez sans vraiment le comprendre!var dots = 5 function increase(){ dots = dots+5; }
n'utilise pas de champ de texte et attribue à l'aide de variables directes, pas à partir de l'entrée utilisateur. C'est donc ce dont je suis parti. Mais j'ai vu que vous avez raison qu'il attribue ce champ de textetxt
àdots
, et qu'ildots
est une variable globale, et qu'il est donc mis à jour par cette entrée. Vous avez raison. Merci.