2015-08-06 22 views
6

TL; DR


fa JavaScript sostituzione supporto/interpolazione?Qual è il modo migliore per creare stringhe/concatenazioni in JavaScript?

Panoramica


Sto lavorando su un progetto JS, e come è sempre più grande, mantenendo le stringhe in buona forma è sempre molto più difficile. Mi chiedo quale sia il modo più semplice e più convenzionale per costruire o costruire stringhe in JavaScript.

La mia esperienza finora:

concatenazione di stringhe inizia a cercare brutto e diventa più difficile da mantenere in quanto il progetto diventa più complesso.

Il più importante a questo punto è la precisione e la leggibilità, si pensi a un mucchio di parti mobili, non solo 2-3 variabili.

È anche importante che sia supportato dai principali browser di oggi (vale a dire almeno ES5 supportato).

Sono consapevole della concatenazione stenografia JS:

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

E della funzione String.concat.

Sto cercando qualcosa di un po 'più ordinato.

Ruby e Swift lo fanno in un modo interessante.

Rubino

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

Swift

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

stavo pensando che ci potrebbe essere qualcosa di simile in JavaScript forse qualcosa di simile a sprintf.js.

Domanda


questo può essere fatto senza alcuna libreria di terze parti? In caso contrario, cosa posso usare?

risposta

17

Con ES6, è possibile utilizzare

ES5 e sotto:

  • utilizzare l'operatore +

    var username = 'craig'; 
    var joined = 'hello ' + username; 
    
  • stringa di concat(..)

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

alternativa, utilizzare metodi Array:

  • join(..):

    var username = 'craig'; 
    var joined = ['hello', username].join(' '); 
    
  • O anche più elaborato, reduce(..) combinata con una di queste:

    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 
    
+1

Con le stringhe di template ES6, prestare attenzione a utilizzare i back-ticks ('') piuttosto che '' o "" (https://developers.google.com/web/updates/2015/01/ES6-Template-Strings? hl = it) – MMagician

2

È possibile utilizzare la funzione concat.

var hello = "Hello "; 
var world = "world!"; 
var res = hello.concat(world); 
+3

Se ho voluto costruire un stringa molto più lunga dire con 6 parti mobili diverse, non sarebbe affatto leggibile con la funzione concat. – MrHaze

+0

Se 'hello' non ha lo spazio finale, come realizzeresti tutto nella stessa riga? 'hello.concat (world.concat (''));'? Oppure useresti ancora la stenografia e fai 'hello.concat ('' + world)'? – Singular1ty

+1

@MrHaze 'concat' accetta un numero variabile di argomenti. Quindi, forse, 'str1.concat.apply (null, [str2, str3, str4]) 'migliora leggermente la leggibilità? – nishanths

2

Si potrebbe usare Coffeescript, è fatto per rendere il codice javascript più conciso ..Per concatenazione di stringhe, si potrebbe fare qualcosa di simile:

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

Forse si può iniziare here per vedere cosa sta offerto da coffescript ..

1

Penso replace() merita menzionare qui.

In alcune condizioni, il metodo di sostituzione può essere utile per la creazione di stringhe. In particolare, ovviamente, quando si inserisce una parte dinamica in una stringa altrimenti statica. Esempio:

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

Il segnaposto che è possibile sostituire può ovviamente essere qualsiasi cosa. Io uso "{0}", "{1}" ecc per abitudine da C#. Deve solo essere abbastanza unico da non verificarsi nella stringa diversa da quella prevista.

Così, a condizione possiamo giocherellare con le parti degli archi un po ', PO esempio potrebbe essere risolto in questo modo troppo:

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

di riferimento per "sostituire": https://www.w3schools.com/jsreF/jsref_replace.asp

Problemi correlati