Bei Verwendung von Vorlagenliteralen bemerkte ich ein Problem mit Tabellenformaten.Template Literal Interpolation bricht Whitespace-Tabelle
Wenn so etwas wie dies zu tun:
var hello = 'Hello',
bye = 'Goodbye';
console.log(`
${hello} World
${bye} World
`);
Da der {bye} Teil vier Buchstaben kurz von ‚Auf Wiedersehen‘ ist die Zeichenfolge druckt wie:
Hello World
Goodbye World
Dies wird noch komplizierter für Interpolationen von Arrays oder Objekten.
Ich frage mich, ob jemand einen Weg gefunden hat, mit dieser Art von Problem umzugehen. Die Tabellenformatierung für eine Zeichenfolge kann während der Interpolation beibehalten werden.
Angenommen, ein Template-Tag verwendet Zeichenfolgen und Arrays. Die Arrays sind mit Leerzeichen zwischen Wörtern verkettet.
var hello = 'Hello',
bye = 'Goodbye',
phrase = ['I', 'like'];
console.log(someTag`
${hello} World
${bye} World
Some things I like:
${phrase} sunsets.
${['I', 'like']} candy.
`);
Gerade falls Sie dem Array eckige Klammer können nicht sagen, Zitaten, Dollar, geschweifte Klammer, und so weiter Zählung in Richtung der Länge der Saite (visuell) vor der Interpolation. Leerzeichen zwischen Wörtern zählen nach der Interpolation zur Zeichenfolgenlänge. Die Einzüge werden durch den Verlust der zusätzlichen Zeichen und das Hinzufügen von Zeichen während der Tag-Verarbeitung bewirkt.
Diese Frage hat eine akzeptierte Antwort, aber ich würde gerne mehr Diskussion sehen. Es kann mehr als eine Antwort auf dieses Problem geben.
Wie werden Sie diese Strings ohne Vorlage lösen? – thefourtheye
Sehr lustig. Es gibt Tabellenformatierer und Padder für diese Art von Dingen, aber ich habe nicht das gleiche Problem mit Template-Strings erwartet, die dafür bekannt sind, dass sie zu weißem Leerzeichen passen. Was ist, wenn die Einfügungen von einer anderen Tag-Funktion benötigt werden und ein Tabellenformatierer/Padder nur eine Zeichenkette erzeugt. Ja, das Problem wurde anderswo gelöst, aber es ist ein völlig neues Problem für diese Vorlagenliterale. Ich nehme an, die andere Option ist einfach nicht, sie für diese Art von Sache zu verwenden. –
Template-Literale tun standardmäßig nichts mit Whitespaces, sie verhalten sich im Wesentlichen wie Strings mit Interpolation. Wenn Sie ein erweitertes Verhalten wünschen, müssen Sie ein getaggtes Vorlagenliteral verwenden, um die gewünschte Konvertierung durchzuführen. – loganfsmyth