Le code suivant donne des résultats étranges :
console.log("" + 1 + 10 + 2 - 5 + "8");
J'ai essayé d'entrer différentes valeurs pour comprendre mais je ne peux pas comprendre ce qui se passe sous le capot.
Le code suivant donne des résultats étranges :
console.log("" + 1 + 10 + 2 - 5 + "8");
J'ai essayé d'entrer différentes valeurs pour comprendre mais je ne peux pas comprendre ce qui se passe sous le capot.
"" + 1 === "1"
"1" + 10 === "110"
"110" + 2 === "1102"
"1102" - 5 === 1097
1097 + "8" === "10978"
En JavaScript, l'opérateur +
est utilisé à la fois pour l'addition numérique et la concaténation de chaînes de caractères. Lorsque vous "ajoutez" un nombre à une chaîne, l'interpréteur convertit votre nombre en chaîne de caractères et les concatène toutes les deux.
En revanche, lorsque vous utilisez l'opérateur -
, la chaîne est convertie en nombre pour permettre la soustraction numérique.
Ensuite, lorsque vous "ajoutez" la chaîne "8"
, la concaténation de chaînes se produit à nouveau. Le nombre 1097
est converti en la chaîne "1097"
, puis joint avec "8"
.
chaîne + nombre = chaîne concaténée
nombre + nombre = la somme des deux nombres
chaîne - nombre = la différence entre (la chaîne forcée) et le nombre
Si l'un ou les deux opérandes est une chaîne, alors le plus est considéré comme un opérateur de concaténation de chaîne plutôt que d'ajouter des nombres.
L'opérateur moins essaie toujours de convertir les deux opérandes en nombres.
donc :
"" + 1 + 10 + 2 = (chaîne) "1102"
"1102" - 5 = (nombre) 1097
1097 + "8" = (chaîne) "10798"
document.getElementById("1").innerHTML = "";
document.getElementById("2").innerHTML = "" + 1;
document.getElementById("3").innerHTML = "" + 1 + 10;
document.getElementById("4").innerHTML = "" + 1 + 10 + 2
document.getElementById("5").innerHTML = "" + 1 + 10 + 2 - 5
document.getElementById("6").innerHTML = "" + 1 + 10 + 2 - 5 + "8";
Ce site contient des informations utiles.
JavaScript est très souple en ce qui concerne la différence entre les chaînes de caractères et les nombres.
...
Donc, si vous utilisez + sur une chaîne de caractères et un nombre, JavaScript va convertir le nombre en chaîne de caractères pour vous. Mieux encore, si vous en avez besoin, vous pouvez traiter les nombres comme des chaînes de caractères ou les chaînes de caractères comme des nombres.
Inversement, si vous appliquez des opérations mathématiques sur une chaîne de caractères, JavaScript va essayer de la convertir en nombre. Si la chaîne de caractères ne peut pas être interprétée comme un nombre (par exemple, s'il y a des lettres dedans), JavaScript renvoie NaN (Not a Number).
Alors que +
et -
peuvent avoir la même Précédence de l'opérateur, ils n'ont pas les mêmes règles de conversion implicite.
Comme -
signifie toujours soustraction de nombres en JavaScript, l'utilisation de -
tentera toujours de convertir implicitement en entier à la fois le côté gauche et le côté droit de l'expression.
Dans ce cas, comme la précédence de l'opérateur est la même et l'évaluation se fait de gauche à droite, on obtient donc (""+1+10+2) en utilisant la conversion explicite en chaîne de caractères de +
pour la concaténation de chaînes, soit la chaîne de caractères "1102". Ensuite, le -
tentera implicitement de convertir la chaîne "1102" en nombre, ainsi que le nombre 5, ce qui donnera 1102-5, soit le nombre 1097. À ce stade, la chaîne "8" est concaténée implicitement en utilisant +
, et le résultat final peut être vu : la chaîne de caractères "10978".
Une alternative intéressante aurait peut-être été ""+1+10+2-5+8, ce qui aurait donné 1097+8, soit le nombre 1105.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.