Leçons du module (4/4)
Conversions de type
Tu dois constamment convertir le type d'une valeur : le value d'un
champ de saisie HTML arrive sous forme de chaîne même s'il représente un nombre,
une API te renvoie des chaînes à formater, tu dois journaliser un objet sous
forme de texte. JS propose trois familles de conversions : explicites, parsers
dédiés, et (à éviter) implicites.
Conversions explicites
Ce sont les plus claires et elles devraient être ton choix par défaut :
Number('42'); // 42
Number('3.14'); // 3.14
Number(''); // 0 ← attenzione
Number(' 10 '); // 10 (spazi vengono ignorati)
Number('ciao'); // NaN ← non rappresenta un numero
String(42); // '42'
String(true); // 'true'
String(null); // 'null'
String(undefined); // 'undefined'
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('abc'); // trueparseInt et parseFloat : des parsers tolérants
À la différence de Number(...), parseInt et parseFloat ignorent la fin
non numérique de la chaîne : ils s'arrêtent au premier caractère non valide.
Number('42px'); // NaN
parseInt('42px'); // 42
parseFloat('3.14em'); // 3.14
parseInt(' 12 anni'); // 12
parseInt('ciao12'); // NaN ← deve iniziare con cifretoFixed pour formater des nombres sous forme de chaînes
Vu rapidement dans la leçon précédente : arrondit à N décimales et renvoie une chaîne.
(3.14159).toFixed(2); // '3.14'
(1).toFixed(2); // '1.00'Pour la reconvertir en number, utilise le préfixe Number(...) ou le + unaire :
Number((3.14159).toFixed(2)); // 3.14
+(3.14159).toFixed(2); // 3.14NaN : la valeur qui te mord
NaN ("Not a Number") provient d'opérations numériques qui échouent :
Number('ciao'); // NaN
0 / 0; // NaN
parseInt('xxx'); // NaNCaractéristiques :
- elle est de type
'number'(oui, un "non-nombre" est un nombre) - elle n'est pas égale à elle-même :
NaN === NaNestfalse - pour la tester, utilise la fonction
Number.isNaN(x)
const x = Number('ciao');
x === NaN; // false (!)
Number.isNaN(x); // trueÀ toi de jouer
Étant donné la chaîne '128.95 EUR', extrais le nombre (décimal) et arrondis-le au premier chiffre après la virgule, en le renvoyant sous forme de number. Attendu : 129.
Afficher l'indice
parseFloat ignore 'EUR'; .toFixed(0) arrondit à l'entier sous forme de chaîne ; Number(...) reconvertit en number.
Solution disponible après 3 tentatives
Exercice de révision
Étant donné `n = Number('non un numero')`, écris une seule expression qui vaut true si le résultat est NaN.
Afficher l'indice
Utilise Number.isNaN, pas n === NaN : NaN n'est pas égal à lui-même.
Solution disponible après 3 tentatives