web-dev-qa-db-fra.com

Quelle est la meilleure façon de créer / concaténer des chaînes en JavaScript?

JavaScript prend-il en charge la substitution/interpolation?

Aperçu


Je travaille sur un projet JS, et à mesure qu'il grandit, garder les cordes en bon état devient beaucoup plus difficile. Je me demande quelle est la façon la plus simple et la plus conventionnelle de construire ou de construire des chaînes en JavaScript.

Mon expérience jusqu'à présent:

La concaténation de chaînes commence à paraître moche et devient plus difficile à maintenir à mesure que le projet devient plus complexe.

Le plus important à ce stade est la concision et la lisibilité, pensez à un tas de pièces mobiles, pas seulement 2-3 variables.

Il est également important qu'il soit pris en charge par les principaux navigateurs à partir d'aujourd'hui (c'est-à-dire au moins ES5 pris en charge).

Je connais le raccourci de concaténation JS:

var x = 'Hello';
var y = 'world';
console.log(x + ', ' + y);

Et de la fonction String.concat .

Je cherche quelque chose d'un peu plus soigné.

Ruby et Swift le font de manière intéressante.

Rubis

var x = 'Hello'
var y = 'world'
print "#{x}, #{y}"

Rapide

var x = "Hello"
var y = "world"
println("\(x), \(y)")

Je pensais qu'il pourrait y avoir quelque chose comme ça dans JavaScript, peut-être quelque chose de similaire à sprintf.js .

Question


Peut-on le faire sans bibliothèque tierce? Sinon, que puis-je utiliser?

18
MrHaze

Avec ES6, vous pouvez utiliser

ES5 et inférieur:

  • utilisez l'opérateur +

    var username = 'craig';
    var joined = 'hello ' + username;
    
  • Chaîne concat(..)

    var username = 'craig';
    var joined = 'hello '.concat(username);
    

Vous pouvez également utiliser les méthodes de tableau:

  • join(..) :

    var username = 'craig';
    var joined = ['hello', username].join(' ');
    
  • Ou encore plus sophistiqué, reduce(..) combiné avec l'un des éléments ci-dessus:

    var a = ['hello', 'world', 'and', 'the', 'milky', 'way'];
    var b = a.reduce(function(pre, next) {
      return pre + ' ' + next;
    });
    console.log(b); // hello world and the milky way
    
40
nishanths
var descriptor = 'awesome';
console.log(`ES6 is ${descriptor}!`);

Plus: https://developers.google.com/web/updates/2015/01/ES6-Template-Strings?hl=en

5
rrowland

Je pense que replace () mérite d'être mentionné ici.

Dans certaines conditions, la méthode replace peut vous être utile lors de la création de chaînes. Plus précisément, évidemment, lorsque vous injectez une partie dynamique dans une chaîne par ailleurs statique. Exemple:

var s = 'I am {0} today!';
var result = s.replace('{0}', 'hungry');
// result: 'I am hungry today!'

L'espace réservé à remplacer peut évidemment être n'importe quoi. J'utilise "{0}", "{1}" etc par habitude à partir de C #. Il doit juste être suffisamment unique pour ne pas apparaître dans la chaîne autre que celle prévue.

Donc, à condition que nous puissions jouer un peu avec les parties de chaîne, l'exemple OP pourrait être résolu comme ceci aussi:

var x = 'Hello {0}';
var y = 'World';
var result = x.replace('{0}', y);
// result: 'Hello World'. -Oh the magic of computing!

Référence pour "remplacer": https://www.w3schools.com/jsreF/jsref_replace.asp

4
Culme

Vous pouvez utiliser la fonction concat.

var hello = "Hello ";
var world = "world!";
var res = hello.concat(world);
2
Script47

Vous pouvez utiliser Coffeescript , il est fait pour rendre le code javascript plus concis. Pour la concaténation de chaînes, vous pouvez faire quelque chose comme ceci:

first_name = "Marty"
full_name = "#{first_name} McFly"
console.log full_name

Vous pouvez peut-être commencer ici pour voir ce qui est proposé par coffescript ..

2
Bla...