Il existe trois types de cinq méthodes pour convertir des données en nombres dans JS, notamment :
• Coercition, les types de données de base de JS sont convertis en types correspondants (Number(v)) de cette manière
•Fonctions natives, ces deux fonctions ont des résultats différents (parseInt(v,radix), parseFloat(v))
•Conversion implicite, JS convertira la variable dans le type correspondant (calcul binaire, calcul mathématique) lors de l'exécution
Les valeurs originales converties peuvent également être simplement divisées en trois catégories : objets, valeurs spéciales et chaînes.
Les valeurs spéciales dans JS incluent les suivantes.
•indéfini, indéfini, lorsqu'une variable est déclarée mais sans valeur assignée ou la valeur d'un attribut qui n'existe pas dans un objet est la suivante.
•NaN/Infinity, ce sont deux "nombres" tenaces (typeof == number), qui représentent respectivement des non-nombres et des nombres infinis. Cela semble inutile. Si la conversion en nombre échoue, la valeur de retour est essentiellement NaN.
•null, utilisé comme objet avec une valeur nulle (typeof == object).
•vrai/faux, valeur booléenne, représente vrai ou faux, équivalent à 1/0.
Pour les chaînes, elles peuvent également être subdivisées en fonction du contenu. Selon les expressions numériques JS, ils peuvent être divisés en légaux et illégaux. Il existe plusieurs manières de classer les numéros légaux :
• Signe : signe positif, signe négatif, non signé
•Base : octale, décimale, hexadécimale
• Notation scientifique
• Décimaux, entiers et abréviations pour les décimales
Sur la base de la classification ci-dessus, j'ai créé une démo pour tester les résultats de différentes méthodes et conversions numériques. La capture d'écran ci-dessous est la conversion sous Chrome.
En regardant les résultats, seuls les calculs binaires peuvent convertir n'importe quelle valeur en un nombre fini (isFinite). Les résultats des calculs mathématiques et de la conversion forcée sont les mêmes.
La conversion des valeurs spéciales est liée à la valeur d'origine et à la méthode de conversion. Toutes les conversions parseInt/parseFloat échouent et renvoient NaN.
•NaN/undefined est converti en NaN par d'autres méthodes ;
•Infinity est converti en NaN par parseInt, et les méthodes restantes ne changent pas sa valeur ;
•null/false/true ne peut pas être converti par parseInt/parseFloat et renvoie NaN.
L'analyse de conversion des chaînes dépend principalement de la méthode de conversion, mais toutes les méthodes ne prennent pas en charge les nombres représentés par des octaux, mais sont traitées comme des nombres décimaux correspondants.
• Les calculs logiques convertissent les expressions légales à l'exception des nombres hexadécimaux négatifs et ignorent la partie décimale ; les expressions illégales renvoient zéro.
•Le calcul mathématique/Nombre est similaire au calcul logique, mais n'arrondit pas les décimales ; les expressions illégales autres que les chaînes vides renvoient NaN.
•parseInt ne conserve également que la partie entière ; mais pour les expressions illégales, il prend la partie entière légale (décimale, hexadécimale, hors notation scientifique) devant la chaîne et la convertit, sinon elle renvoie NaN.
•parseFloat est similaire à parseInt, sauf qu'il peut reconnaître et conserver la partie décimale et ne prend pas en charge les nombres hexadécimaux.