#20431 - Note : JS, dataset et typage pourri
https://lehollandaisvolant.net/?mode=links&id=20211001171736Quand on utilise les attributs « data-* », JS le récupère toujours sous la forme d’une chaîne de caractères, même si ça contient un nombre :
// <div data-nb="12"/>
div.dataset.nb; // contient « "12" », pas « 12 ».
Une façon de s’en convaincre :
div.dataset.nb += 2; // <div data-nb="122"/>
car "12"+2 = "122".
Par contre, si au lieu de faire une addition, on fait une soustraction, alors là il le transforme en nombre puis fait l’opération. Car si une chaîne + chaîne résulte en la concaténation des chaînes, les soustractions de chaînes il ne sait pas faire : la soustraction ne concerne que des nombres, d’où le .parseInt() implicite.
div.dataset.nb -= 2; // <div data-nb="10"/>
Une solution peut-être :
div.dataset.nb = div.dataset.nb+2.
Mais c’est pas joli, pas efficace, ni propre quand l’expression est un peu longue (avec des querySelector partout).
Du coup, une petite astuce :
div.dataset.nb -= -2; // <div data-nb="14"/>
Tout bêtement :-)
ÉDIT :
Et un autre truc tout con, quand on veut transformer une variable de 1 à 0 ou de 0 à 1.
Au lieu de faire ça :
if (var == 1) {
var = 0;
} else {
var = 1;
}
Faites ça :
var = 1-var;
Ça fait la même chose :
— si var vaut 1, alors le résultat sera 1−1, donc la nouvelle valeur sera 0.
— si var vaut 0, alors le résultat sera 1−0, donc la nouvelle valeur sera 1.
Si vous utilisez les booléens :
var = !var;