91 votes

Conversion de chaîne JavaScript et numéro

Comment puis-je faire ce qui suit en JavaScript?

  1. Concaténer "1", "2", "3" en "123"

  2. Convertir "123" en 123

  3. Ajouter 123 + 100 = 223

  4. Convertir 223 en "223"

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 ?

120voto

artlung Points 13433

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

0 votes

Y a-t-il une raison particulière pour laquelle vous avez mis ceci dans des balises script?

0 votes

@Julix Pour les novices en 2009, plonger dans un fichier html pour apprendre un concept de base. Si je répondais à cela aujourd'hui, je le ferais peut-être différemment, mais peut-être pas.

54voto

Patrick McElhaney Points 22093

Étape (1) Concaténer "1", "2", "3" en "123"

 "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 ("")._

Étape (2) Convertir "123" en 123

 parseInt("123")

Avant ECMAScript 5, il était nécessaire de spécifier la base 10 : parseInt("123", 10)

Étape (3) Ajouter 123 + 100 = 223

 123 + 100

Étape (4) Convertir 223 en "223"

 (223).toString() 

ou

 String(223)

Mettons Tout Ensemble

 (parseInt("1" + "2" + "3") + 100).toString()

ou

 (parseInt(["1", "2", "3"].join("")) + 100).toString()

4 votes

Joli exemple clair. Bravo également pour la bonne forme - vous devriez toujours spécifier la base de la fonction parseInt.

0 votes

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.

0 votes

@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.

27voto

cesarl Points 173
r = ("1"+"2"+"3")           // étape1 | construire une chaîne ==> "123"
r = +r                      // étape2 | en nombre    ==> 123
r = r+100                   // étape3 | +100         ==> 223
r = ""+r                    // étape4 | en chaîne    ==> "223"

// sur une ligne
r = ""+(+("1"+"2"+"3")+100);

0 votes

Merci pour la conversion rapide de chaîne en nombre

0 votes

Si vous vérifiez s'il s'agit d'un nombre ou non, alors utilisez parseInt(). Par exemple, parseInt("") est NaN, mais +" " est 0!

15voto

Nosredna Points 33670

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.

3 votes

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.

1 votes

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.

6 votes

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.

11voto

Andrew Hare Points 159332

Vous pouvez le faire comme ça :

// étape 1
var one = "1" + "2" + "3"; // valeur de chaîne "123"

// étape 2
var two = parseInt(one); // valeur entière 123

// étape 3
var three = 123 + 100; // valeur entière 223

// étape 4
var four = three.toString(); // valeur de chaîne "223"

16 votes

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.

3 votes

D'accord. Sinon, les valeurs commençant par 0 seront vues comme des nombres octaux (base-8).

1 votes

Encore plus inattendu, les valeurs commençant par 0 et contenant ensuite 8 ou 9 échoueront, conduisant à un retour de 0. Par exemple, parseInt('034') = 28 et parseInt('09') = 0.

Prograide.com

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.

Powered by:

X