Conversion automatique des types de données
Comme vous le savez déjà, les chaînes de caractères en JavaScript doivent être entourées de guillemets. Il peut arriver que tous les caractères de la chaîne soient des chiffres :
let a = '123';
Dans ce cas, la variable a est également
une chaîne de caractères, mais avec une nuance.
L'essence de la nuance est la suivante : si une opération mathématique est effectuée sur une chaîne de chiffres, cette opération sera exécutée comme s'il s'agissait de nombres, et non de chaînes :
alert('2' * '3'); // affichera 6
Dans ce cas, JavaScript voit que nous tentons d'effectuer une opération non autorisée pour les chaînes, mais autorisée pour les nombres.
Il voit également que nos chaînes sont essentiellement des nombres entre guillemets. Par conséquent, JavaScript effectue automatiquement la conversion de ces chaînes en nombres et exécute l'opération mathématique correspondante sur eux.
Cela fonctionne si nos chaînes ne contiennent que
des chiffres. S'il y a au moins une lettre
- JavaScript considérera l'opération comme incorrecte
et donnera comme résultat la valeur NaN :
alert('2' * '3s'); // affichera NaN
En outre, la conversion automatique se produit si l'opération est mathématiquement correcte, mais non autorisée pour les chaînes.
Par exemple, les chaînes ne peuvent pas (contrairement aux nombres) être multipliées, divisées, soustraites, donc dans toutes ces opérations, il y aura une conversion automatique des chaînes contenant des chiffres en nombres.
Cependant, les chaînes, tout comme les nombres, peuvent être additionnées
avec l'opérateur +. Cela signifie
que dans le cas d'une addition, il n'y aura pas de conversion
automatique :
let a = '1' + '2';
alert(a); // affichera '12' - une concaténation de chaînes a eu lieu
Si l'un des opérandes est un nombre et l'autre une chaîne, c'est toujours la chaîne qui l'emporte :
let a = 1 + '2';
alert(a); // affichera '12'
Dans de tels cas, JavaScript, au contraire, convertit automatiquement les nombres en chaînes et effectue une concaténation de chaînes.
Il y a cependant des nuances lorsque le nombre d'opérandes est supérieur à deux : dans ce cas, la conversion vers un type spécifique dépend de l'ordre d'exécution des opérations.
Dans l'exemple suivant, d'abord 2 et 3
seront additionnés comme des nombres, puis le résultat sera ajouté
à la chaîne '1' déjà en tant que chaîne '5',
ce qui donnera finalement la chaîne '15' :
let a = '1' + (2 + 3);
alert(a); // affichera '15'
Si les parenthèses sont supprimées, tout sera additionné
de gauche à droite. C'est-à-dire que d'abord la chaîne '1'
sera additionnée au nombre 2, ce qui
donnera la chaîne '12'. Ensuite, ce
résultat sera additionné au nombre 3, ce qui
donnera la chaîne '123' :
let a = '1' + 2 + 3;
alert(a); // affichera '123'
Mais dans l'exemple suivant, les nombres 2
et 3 sont écrits au début, donc d'abord
ils seront additionnés comme des nombres, donnant
le nombre 5, puis ce nombre sera ajouté
à la chaîne '1', donnant finalement la chaîne '51' :
let a = 2 + 3 + '1';
alert(a); // affichera '51'
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' + '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' + 2;
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = 5 + '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = 5 + 2;
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' * '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' - '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' / '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' % '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5s' * '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5s' + '2';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = (-'5') + (-'2');
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' * 1 + '2' * 1;
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '5' * '1' + '2' * '1';
alert(a);
Sans exécuter le code, déterminez ce qui sera affiché à l'écran :
let a = '' + 3 + 1;
alert(a);