688 Stimmen

Wie interpoliert man Variablen in Strings in JavaScript, ohne Verkettung?

Ich weiß, dass wir in PHP etwas Ähnliches machen können:

$hello = "foo";
$my_string = "I pity the $hello";

Ausgabe: "I pity the foo"

Ich habe mich gefragt, ob das Gleiche auch in JavaScript möglich ist. Die Verwendung von Variablen innerhalb von Strings ohne Verkettung - das sieht prägnanter und eleganter aus.

1253voto

bformet Punkte 11947

Sie können folgende Vorteile in Anspruch nehmen Vorlage Literale und verwenden Sie diese Syntax:

`String text ${expression}`

Schablonenliterale werden von der Rückwärtshaken (` `) (Grabakzent) anstelle von doppelten oder einfachen Anführungszeichen.

Diese Funktion wurde in ES2015 (ES6) eingeführt.

Beispiel

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b}.`);
// "Fifteen is 15.

Ist das nicht toll?

Bonus:

Es ermöglicht auch für mehrzeilige Zeichenfolgen in Javascript ohne escaping, die für Vorlagen groß ist:

return `
    <div class="${foo}">
         ...
    </div>
`;

_Browser-Unterstützung :_

Da diese Syntax von älteren Browsern (vor allem Internet Explorer) nicht unterstützt wird, sollten Sie Babel /Webpack, um Ihren Code in ES5 zu transpilieren, damit er überall läuft.


Nebenbei bemerkt:

Ab IE8+ können Sie die grundlegende String-Formatierung innerhalb von console.log :

console.log('%s is %d.', 'Fifteen', 15);
// Fifteen is 15.

99 Stimmen

Beachten Sie, dass die Vorlagenzeichenfolge mit hinteren Häkchen (`) anstelle der üblichen Anführungszeichen abgegrenzt ist. "${foo}" ist buchstäblich ${foo} `${foo}` ist das, was Sie eigentlich wollen

1 Stimmen

Außerdem gibt es viele Transpiler, die ES6 in ES5 umwandeln, um das Kompatibilitätsproblem zu beheben!

0 Stimmen

Wenn ich den Wert a oder b ändere. console.log( Fifteen is ${a + b}. ); ändert sich nicht dynamisch. Es zeigt immer Fifteen ist 15.

178voto

Sarfraz Punkte 366217

Vor Firefox 34 / Chrome 41 / Safari 9 / Microsoft Edge, nein, das war in Javascript nicht möglich. Du müsstest darauf zurückgreifen:

var hello = "foo";
var my_string = "I pity the " + hello;

2 Stimmen

Es wird bald in Javascript (ES6) mit Template Strings möglich sein, siehe meine ausführliche Antwort unten.

0 Stimmen

Es ist möglich wenn Sie CoffeeScript schreiben möchten, was eigentlich Javascript mit einer besseren Syntax ist.

1 Stimmen

Großer Aufschrei für ältere Browser :)

44voto

Justin Ethier Punkte 126797

Vor Firefox 34 / Chrome 41 / Safari 9 / Microsoft Edge, nein. Obwohl Sie versuchen könnten sprintf für JavaScript um auf halbem Weg dorthin zu gelangen:

var hello = "foo";
var my_string = sprintf("I pity the %s", hello);

0 Stimmen

Danke. Wenn Sie Dojo verwenden, ist sprintf als Modul verfügbar: bill.dojotoolkit.org/api/1.9/dojox/string/sprintf

43voto

Scott Evernden Punkte 37117

Nun, das könnte man tun, aber es ist nicht besonders allgemein

'I pity the $fool'.replace('$fool', 'fool')

Sie könnten leicht eine Funktion schreiben, die dies auf intelligente Weise erledigt, wenn Sie es wirklich nötig hätten

0 Stimmen

Ziemlich anständig sogar.

2 Stimmen

Diese Antwort ist gut, wenn Sie eine Vorlage in der Datenbank speichern und bei Bedarf verarbeiten müssen

0 Stimmen

Gut, es funktioniert gut. sehr einfach, aber nicht auf den Geist kommen.

31voto

mjs Punkte 19667

Vollständige und gebrauchsfertige Antwort für <ES6 :

 var Strings = {
        create : (function() {
                var regexp = /{([^{]+)}/g;

                return function(str, o) {
                     return str.replace(regexp, function(ignore, key){
                           return (key = o[key]) == null ? '' : key;
                     });
                }
        })()
};

Aufruf als

Strings.create("My firstname is {first}, my last name is {last}", {first:'Neo', last:'Andersson'});

Zum Anbringen an String.prototype :

String.prototype.create = function(o) {
           return Strings.create(this, o);
}

Dann verwenden Sie als :

"My firstname is ${first}".create({first:'Neo'});

Wenn Sie auf >ES6 dann können Sie das auch tun:

let first = 'Neo'; 
`My firstname is ${first}`;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X