Comment puis-je faire ce qui suit en JavaScript?
-
Concaténer "1", "2", "3" en "123"
-
Convertir "123" en 123
-
Ajouter 123 + 100 = 223
-
Convertir 223 en "223"
Comment puis-je faire ce qui suit en JavaScript?
Concaténer "1", "2", "3" en "123"
Convertir "123" en 123
Ajouter 123 + 100 = 223
Convertir 223 en "223"
Vous voulez vous familiariser avec parseInt()
et toString()
.
Et utile dans votre boîte à outils sera de regarder une variable pour savoir de quel type il s'agit - typeof
:
/**
* afficher la valeur et le type de la variable passée en paramètre
*/
function printWithType(val) {
document.write('<pre>');
document.write(val);
document.write(' ');
document.writeln(typeof val);
document.write('</pre>');
}
var a = "1", b = "2", c = "3", result;
// Étape (1) Concaténer "1", "2", "3" en "123"
// - l'opérateur de concaténation est juste "+", tant
// que tous les éléments sont des chaînes de caractères, cela fonctionne
result = a + b + c;
printWithType(result); //123 string
// - Si ce n'étaient pas des chaînes de caractères, vous pourriez faire
result = a.toString() + b.toString() + c.toString();
printWithType(result); // 123 string
// Étape (2) Convertir "123" en 123
result = parseInt(result,10);
printWithType(result); // 123 number
// Étape (3) Ajouter 123 + 100 = 223
result = result + 100;
printWithType(result); // 223 number
// Étape (4) Convertir 223 en "223"
result = result.toString(); //
printWithType(result); // 223 string
// Si vous concaténez un nombre avec une
// chaîne vide, vous obtenez une chaîne
result = result + "";
printWithType(result); //223 string
"1" + "2" + "3"
ou
["1", "2", "3"].join("")
_La méthode join concatène les éléments d'un tableau dans une chaîne, en plaçant le délimiteur spécifié entre les éléments. Dans ce cas, le "délimiteur" est une chaîne vide (""
)._
parseInt("123")
Avant ECMAScript 5, il était nécessaire de spécifier la base 10 : parseInt("123", 10)
123 + 100
(223).toString()
ou
String(223)
(parseInt("1" + "2" + "3") + 100).toString()
ou
(parseInt(["1", "2", "3"].join("")) + 100).toString()
Joli exemple clair. Bravo également pour la bonne forme - vous devriez toujours spécifier la base de la fonction parseInt
.
Y compris le radix m'a confus et j'ai défilé vers une autre réponse où cela était expliqué. J'ai ajouté une explication rapide pour être juste au point de confusion.
@ArtOfWarfare Merci, bonne modification. Le radix était nécessaire au moment de cette réponse. De nos jours, on peut soutenir qu'il est inutile de l'inclure. À partir de ES5, que tous les navigateurs "modernes" et Node.js prennent en charge, parseInt() utilise toujours la base 10.
Ces questions reviennent tout le temps en raison du système de typage de JavaScript. Les gens pensent qu'ils obtiennent un nombre alors qu'ils obtiennent la chaîne d'un nombre.
Voici quelques choses que vous pourriez voir qui tirent parti de la façon dont JavaScript gère les chaînes et les nombres. Personnellement, je souhaite que JavaScript ait utilisé un symbole autre que + pour la concaténation de chaînes.
Étape (1) Concaténer "1", "2", "3" en "123"
résultat = "1" + "2" + "3";
Étape (2) Convertir "123" en 123
résultat = +"123";
Étape (3) Ajouter 123 + 100 = 223
résultat = 123 + 100;
Étape (4) Convertir 223 en "223"
résultat = "" + 223;
Si vous savez POURQUOI cela fonctionne, vous êtes moins susceptible d'avoir des problèmes avec les expressions JavaScript.
Je pense réellement que c'est une très mauvaise pratique car c'est assez opaque quant à ce qui se passe. Savoir que certaines opérations affectent une conversion implicite est une astuce, et une bonne à savoir, mais ce n'est pas du tout lisible. La communication est tout.
Je pense qu'il est important de connaître ces choses PRÉCISEMENT afin de savoir ce qui se passe lorsque vous lisez du code. Beaucoup de JavaScript est concis car il est transmis en tant que source, et un code court peut signifier une réduction des coûts du serveur.
Vous devriez parvenir à cela grâce à des outils de compression, cependant, sous cette forme, il s'agit d'une optimisation à un coût de maintenance très réel.
La meilleure pratique serait d'ajouter le paramètre radix à la fonction parseInt(). donc, parseInt(un, 10) assure que tout ce que vous lui donnez ne sera pas mal converti.
D'accord. Sinon, les valeurs commençant par 0
seront vues comme des nombres octaux (base-8).
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.
42 votes
Presque tous les livres sur JavaScript que j'ai lus abordent ces problèmes. Mais c'est correct. Répondre aux questions, c'est ce que StackOverflow est censé faire. @Shadi Almosri--SO a une règle "ne sois pas méchant". Je ne vois pas l'intérêt de rabaisser les personnes qui posent des questions ici, puisque c'est le but de l'endroit.
4 votes
@Nosredna : Je comprends parfaitement le fait de poser des questions, j'adore rien de plus que d'y répondre, mais je pense que montrer que vous avez essayé est une meilleure étiquette que de simplement attendre une réponse et aussi meilleur pour une expérience personnelle d'apprentissage. Juste mon avis, je ne veux pas être méchant! :)
1 votes
@Shadi, alors comment aurait dû être posée la question ? Avec une déclaration d'avoir déjà cherché la réponse ?
1 votes
Il m'a paru un peu comme un devoir lorsque je l'ai vu pour la première fois, mais en le relisant, j'ai pensé que ce n'était pas le cas. Il semblait que quelqu'un expérimentait en JavaScript et obtenait des résultats inattendus et voulait le clouer. Cela dit, je me demande si stackoverflow.com/faq pourrait inclure quelque chose comme un code de l'honneur pour les étudiants. Nous sommes un peu une université mondiale ici, et je ne pense pas que ce soit fou d'essayer de comprendre ce que pourrait être un ensemble de règles éthiques pour cet endroit. Ou peut-être que c'est fou. :-)
0 votes
@nosredna Montrer un exemple de code d'une tentative suffit à me pousser à tout essayer pour aider. Je veux dire sérieusement google.co.uk/search?q=javascript+convert+string+int c'est si difficile à chercher? Il avait même l'étape difficile avec le premier pas en connaissant le terme technique : google.co.uk/search?q=Concatenate+javascript peut-être? Toutes les démarches sont simples donc une tentative à cela aurait, à mon avis, été plus utile dans l'ensemble. La façon dont la question a été posée montre la paresse plutôt que d'être "bloqué". Encore une fois, c'est juste mon opinion. Il est évident que je me soucie d'aider sinon je n'aurais pas gaspillé autant de temps à commenter ici!
6 votes
@Shadi, eh bien, du côté positif, la question et la réponse se trouvent dans StackOverflow, et espérons-le, aideront d'autres personnes. Je vois des gens bloqués sur ce genre de choses tout le temps, surtout quand ils viennent de langages comme Java. Il y a une raison pour laquelle les gens posent cette question encore et encore - c'est parce qu'ils PENSENT savoir comment les expressions en JavaScript fonctionnent, mais ce n'est pas le cas. Ils font des hypothèses basées sur leur expérience en dehors de JS. C'est pourquoi il est si utile de s'asseoir et d'essayer quelques tests simples avec l'ajout de chaînes de caractères et de nombres, et d'essayer plus et moins unaires.