Numbers

Une valeur numérique est composée d'une série de caractères numériques, par exemple:

5

Le type de données numériques inclut également quelques propriétés globales spéciales qui représentent des concepts numériques, telles que Infinity et NaN, une valeur signifiant "pas un nombre", un résultat potentiel de la tentative d'effectuer des calculs mathématiques sur des valeurs qui ne sont pas des nombres.

Objet numérique

Lorsqu'une valeur est transmise à la fonction Number(), cette valeur est convertie au nombre équivalent. Par exemple, une chaîne numérique produit une primitive de nombre équivalent:

Number( "10" );
> 10

La transmission d'une valeur false ou null à Number() renvoie 0, et true renvoie 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Si une valeur ne peut pas être convertie, comme dans le cas de undefined ou une chaîne contenant des caractères non numériques, la fonction Number renvoie NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Comme détaillé dans la section sur l'héritage des prototypes, vous n'aurez probablement aucune raison d'utiliser l'objet Number en tant que constructeur, car il crée un objet Number au lieu d'un littéral numérique.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Cet objet se comporte comme la valeur qui lui a été attribuée pour les opérations mathématiques, mais il échoue aux comparaisons d'égalité strictes avec les littéraux numériques, car les types de données ne correspondent pas, sans fournir d'avantage pratique par rapport à une valeur littérale.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Floats et entiers

JavaScript ne comporte qu'un seul type de nombre: les nombres à virgule flottante à double précision IEEE 754-1985 64 bits entre -2^1024 et 2^1024. Avant que JavaScript ne stocke un nombre en mémoire, il le convertit en nombre binaire à virgule flottante, également appelé float.

Ce stockage de 64 bits (un bit "signe" positif ou négatif, 11 bits pour un exposant et 52 bits pour une fraction) peut entraîner des erreurs de précision pour n'importe quel nombre de chiffres ne correspondant pas à une plage autorisée. Cette limitation est inhérente au type de données numériques de JavaScript.

0.1 + 0.7
> 0.7999999999999999

À la place, une valeur numérique peut être stockée en tant qu'entier, c'est-à-dire un nombre à virgule flottante sans fraction entre -(2^53 − 1) et 2^53 − 1. Étant donné que les nombres à virgule flottante et entier sont stockés de la même manière fondamentale, il n'existe aucune différence pratique dans le fonctionnement de ces nombres. Toutefois, nous vous recommandons d'utiliser des nombres entiers dans la mesure du possible afin d'éviter les erreurs de précision.

Opérateurs numériques

Lorsque vous utilisez des opérateurs mathématiques standards avec des primitives numériques, l'ordre des opérations mathématique s'applique: toutes les expressions entre parenthèses sont évaluées en premier, suivies des exposants, de la multiplication, de la division, de l'addition et de la soustraction.

Opérateur Nom Description Utilisation Résultat
+ Ajout 2+2 4
- Soustraction 4-2 2
* Multiplication 2*5 10
/ Division 10/5 2
++ Incrément Ajoute un à un nombre 2++ 3
-- Diminuer Soustrait un d'un nombre 3-- 2
** Exposant Renvoie le résultat de l'élévation du premier opérande
à la puissance du deuxième opérande.
2**4 16
% Reste Renvoie le reste restant lorsque le premier opérande
est divisé par le deuxième opérande.
12%5 2

Vous pouvez également utiliser des opérateurs d'affectation mathématique pour effectuer une opération mathématique sur la valeur d'une variable et attribuer immédiatement cette valeur nouvellement calculée à la variable.

Opérateur Nom Utilisation
+= Attribution de l'ajout myValue += 2
-= Attribution de soustraction myValue -= 2
*= Attribution de multiplication myValue *= 2
/= Attribution de la division myValue /= 2
**= Attribution de l'exposant myValue **= 2
%= Affectation restante myValue %= 2

Valeurs symboliques

La primitive numérique s'applique également à quelques cas particuliers: la valeur "pas un nombre" (NaN) et une valeur représentant l'infini qui peut être positive (Infinity) ou négative (-Infinity).

Vous pouvez rencontrer Infinity rarement en raison de la division par zéro, un cas dans lequel la plupart des langages de programmation génèrent une erreur à la place:

10 / 0
> Infinity

N'oubliez pas que JavaScript est sensible à la casse. Infinity est un type de données numériques représentant le concept d'infini, mais infinity n'a pas de signification particulière:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (qui signifie Not a Number) s'affiche plus fréquemment, lorsque le résultat d'une opération arithmétique ne peut pas être exprimé sous la forme d'un nombre. Par exemple, comme JavaScript tente de déduire le type de données à partir de la valeur et du contexte, un littéral de chaîne ne contenant qu'un nombre peut être utilisé dans une opération mathématique:

"2" * 2;
> 4

Toutefois, si cette chaîne ne peut pas être analysée en tant que valeur numérique, l'opération mathématique ne sera pas un nombre:

"two" * 2;
> NaN

NaN est renvoyé dans tous les cas où une valeur non valide est représentée sous la forme d'un nombre dans une opération mathématique. Voici quelques exemples :

  • Échec des conversions de nombre (par exemple, parseInt( undefined ))
  • Opérations arithmétiques pour lesquelles le résultat n'est pas un nombre réel (par exemple, 0 / 0, Math.sqrt( -10 ))
  • Opération arithmétique dont le résultat est indéterminé (0 * Infinity)
  • Une opération arithmétique qui inclut un élément NaN explicite (NaN + 2) ou un résultat NaN (2 * "string" / 2)

Testez vos connaissances

Quel est le résultat de la transmission de false à Number() ?

0
Faux
NaN
1

Quel est le résultat de l'opération mathématique suivante ?

"Six" * 3

NaN
2
18
Vrai
0