close

Types et valeurs primitives

#1 Les types primitifs open

Il y a sept types de donnée primitifs en JavaScript

  1. Number pour les nombres, qu'ils soient entiers ou flottants.
  2. String pour les chaînes de caractères.
  3. Boolean pour les valeurs booléennes.
  4. BigInt pour les entiers de grande taille.
  5. Symbol.
  6. null qui est une valeur et un type.
  7. undefined qui est une valeur et un type.

Le type Object n'est pas un type primitif.

BigInt est un type qui permet de travailler sur de très grandes valeurs entières. Des valeurs qui dépassent la valeur théorique maximale qui est spécifiée dans Number.MAX_SAFE_INTEGER et qui vaut 2**53-1.

#2 Les valeurs littérales open

Dans un langage classique tel que le C ou le C++ lorsque l'on affecte une variable, par exemple à un nombre entier, on appelle ce nombre une valeur littérale.

Par exemple en C pour déclarer un entier, je fais int i = 1; mais le 1 n'est doté d'aucune méthode et ne provient d'aucun constructeur. C'est une valeur littérale point barre.

#3 Les valeurs primitives open

Examinons maintenant en JavaScript la valeur 1.

Si je tape (1). dans ma console. Je mets des parenthèses pour des raisons syntaxiques, car le point est aussi la virgule décimale. Qu'est-ce que je vois ?

  1. J'ai un constructeur qui ici est Number.
  2. J'ai les méthodes d'un Number.
  3. J'ai les propriétés d'un Number.
Les litéraux ont des méthodes et des propriétés

Je peux appeler une méthode, car une valeur primitive a accès aux méthodes de l'objet primitif duquel elle est issue.

Appel d'une méthode sur une valeur primitive

On peut faire les mêmes constatations pour un booléen ou une chaîne de caractères.

Les litéraux sont issus des types primitifs

Pour autant, une valeur primitive n'est pas une instance d'un objet primitif. Tout ça est logique, car une instance a une valeur qui est une référence et pas une valeur littérale.

Les valeurs primitives ne sont pas des instances

#4 Les instances des types primitifs open

Si vous venez d'un autre langage, vous pourriez être tentés (ça m'est arrivé) d'allouer vos chaînes de caractères avec un constructeur.

N'oubliez pas qu'en JavaScript, lorsque vous appelez un constructeur, vous récupérez une référence. Donc, si vous faites par exemple deux appels pour allouer deux chaînes de caractères, eh bien, vous récupérez deux références qui évidemment pointent vers des adresses différentes.

Pour récupérer la valeur primitive, à partir de la référence, il faut faire appel à la méthode valueOf() de l'objet Object.

Attention si vous prenez des instances