模板文字插值打断空白表

Template literal interpolation breaks whitespace table

本文关键字:空白 插值 文字      更新时间:2023-09-26

在使用模板文字时,我注意到表格式存在问题。

当做这样的事情时:

var hello = 'Hello',
    bye = 'Goodbye';
console.log(`
    ${hello}    World
    ${bye}      World
`);

因为{bye}部分比"再见"少了四个字母,所以字符串打印为:

    Hello    World
    Goodbye      World

对于数组或对象的插值,这会变得更加复杂。

我想知道是否有人找到了解决这类问题的方法。在插值期间,可以保留字符串的间隔表格式。


现在假设一个模板标记使用字符串和数组。数组用单词之间的空格连接。

var hello = 'Hello',
    bye = 'Goodbye',
    phrase = ['I', 'like'];
console.log(someTag`
    ${hello}         World
    ${bye}           World
    Some things I like:
    ${phrase}        sunsets.
    ${['I', 'like']} candy.
`);

以防万一,你不能告诉数组方括号、引号、美元、大括号等在插值前(视觉上)计入字符串的长度。单词之间的空格计入插值后的字符串长度。缩进会受到额外字符丢失和标记处理过程中添加字符的影响。

这个问题有一个公认的答案,但我希望看到更多的讨论。这个问题可能有不止一个答案。

您可以使用制表符来补偿单词的长度变化:

const hello = 'Hello';
const bye = 'Goodbye';
const str = `
    ${hello}'t World
    ${bye}'t World
`;
console.log(str);
document.getElementById('demo').innerText = str;
<pre id="demo"></pre>