Conversion et coercition

Lorsque nous ajoutons des variables, il est relativement simple d'en choisir le type. Mais cela n'est pas toujours possible. Parfois, ce sont vos utilisateurs qui vont entrer des informations. Il se peut aussi qu'il soit nécessaire de transposer une valeur prédéfinie, d'un type vers un autre.

Pour cela, nous avons deux solutions, la “conversion” et la “coercition. La conversion se fait par nos soins, alors que la coercition se fera automatiquement par notre langage JavaScript.

Conversion

Pour convertir un texte en chiffre, il est possible d'utiliser une fonction du nom de "Number( … )". Nous n'avons pas besoin de savoir comment fonctionne une fonction pour l'utiliser, mais basiquement, une fonction a toujours un nom et parfois des arguments entre parenthèses (la parenthèse, elle, est toujours présente, même si elle est vide). Ici, on écrira donc:

const birthYear = "1988";
console.log(number(birthYear));

Cela va transformer le “1988” depuis une chaîne de caractères (string), vers un nombre (int). Attention néanmoins avec le code précédent, notre nouveau type de valeur n'est pas encore enregistré dans une variable et donc, “birthYear” est toujours une chaîne de caractère. Pour cela, il faudra soit toujours avoir la valeur de la variable dans une fonction "Number( … )", soit mettre notre valeur dans une variable "let" afin de pouvoir changer notre type en écrivant comme suit:

birthYear = Number(birthYear);

Que se passe-t-il lorsque nous essayons de convertir en chiffre, une chaine de caractère qui n'est pas transposable, par exemple, le mot “Hello” ? Et bien notre conversion nous retournera la valeur "NaN" qui veut dire que notre fonction ne peut pas nous retourner de valeur valide.

Il est bien entendu possible de passer d'un nombre, vers une chaine de caractère. Pour cela, nous utiliserons la fonction "String( … )". Par exemple:

const currentYear = 2024;
console.log(String(currentYear));

De cette manière, je transpose le chiffre 2024 en chaine de caractère. Encore une fois, cela ne me stocke pas cette nouvelle valeur. Comme dans l'exemple précédent, il est nécessaire de le réassigner si mon but est d'avoir cette valeur uniquement dans mon nouveau type.

La dernière conversion possible est la booléenne, mais nous l'introduirons dans un chapitre à part entière.

Coercition

On parle de coercition lorsque c'est notre langage qui va, de lui même, convertir des valeurs. Dans notre cas, la coercition se produit lorsque nous essayons de combiner deux valeurs différentes à l'aide d'un opérateur. Ce que le JavaScript va donc faire, c'est convertir l'une des deux valeurs pour qu'elle soit du même type que l'autre et ainsi pouvoir résoudre l'opération.

Nous avons déjà été témoins de cette approche. Par exemple:

console.log( "j'ai " + 36 + " ans");

Ici, notre chiffre sera converti en chaine de caractère et le résultat s'affichera en tant que tel. Mais comment cela fonctionne ? La réponse réside dans l'opérateur. Celui-ci aura toujours un type privilégié. C'est-à-dire que, dans le cas ou il y a deux types de valeurs différentes, il choisir celle qu'il privilégie pour résoudre l'opération. Pour le symbole "+", c'est la chaine de caractère.

La même chose se produit lorsque l'on utilise le symbole "-", mais cette fois-ci, c'est les nombres qui sont privilégiés. Cela veut dire que si j'essaie de calculer mon âge et que ma date de naissance est une chaine de caractère, l'opération pourra tout de même se résoudre grâce à la conversion automatique de cette valeur en chiffre.

Chaque opérateur a donc un type privilégié et nous donnera un résultat spécifique. Il est donc nécessaire de tester nos opérations afin d'être sûr qu'elles nous renvoient les bons résultats.

La coercition est moins utilisée que la conversion et ceci, car elle est bien plus stricte. Il est important de tout connaître de ces types privilégiés par opérateurs afin de ne pas créer de résultat caduc. C'est pourquoi, dans un premier temps, il vous est conseillé d'utiliser la conversion afin de toujours être bien sûr de vos opérations.

arrow-up-circle