Je rencontre un problème dans lequel une variable entière récupérée de LocalStorage se comporte de manière anormale en fonction de la première opération effectuée sur cette variable.
Si la première opération effectuée est une soustraction, la variable se comportera comme un entier. Toutes les autres opérations se déroulent normalement.
Toutefois, si la première opération effectuée est une addition, la variable sera traitée comme une chaîne de caractères. Toute autre addition la traitera également comme une chaîne de caractères, jusqu'à ce que la première opération de soustraction soit effectuée.
Voici le code en question (Pardonnez-moi pour toutes les alertes) :
<script type="text/javascript">
var line = 125;
if (localStorage.getItem("gtLine") !== null) {
line = localStorage.getItem("gtLine");
}
function shrink() {
alert(line);
line -= 10;
alert(line);
localStorage.setItem("gtLine", line);
}
function grow() {
alert(line);
line += 10;
alert(line);
localStorage.setItem("gtLine", line);
}
function reset() {
line = 125;
localStorage.setItem("gtLine", line);
alert(line);
}
</script>
<button onClick="javascript:shrink();">Shrink</button>
<button onClick="javascript:grow();">Grow</button>
<button onClick="javascript:reset();">reset</button>
Et les étapes à suivre pour reproduire le problème :
Tout d'abord, appuyez sur les boutons "shrink" et "grow", dans l'ordre qui vous convient, pour vérifier que le script fonctionne.
Ensuite, rafraîchissez la page pour qu'elle recharge la variable à partir de localStorage, appuyez sur le bouton "shrink", puis sur les boutons "shrink" et "grow", et vous verrez qu'ils fonctionnent toujours.
Maintenant, rafraîchissez à nouveau, mais cette fois-ci, appuyez d'abord sur le bouton de croissance. La fonction d'agrandissement traite maintenant la variable comme une chaîne de caractères, tandis que la fonction de réduction reste inchangée.