在JavaScript中创建多行字符串

New*_*ewy 2412 javascript string heredoc multiline

我在Ruby中有以下代码.我想将此代码转换为JavaScript.什么是JS中的等效代码?

text = <<"HERE"
This
Is
A
Multiline
String
HERE
Run Code Online (Sandbox Code Playgroud)

Ano*_*ous 3007

更新:

ECMAScript 6(ES6)引入了一种新的文字,即模板文字.它们具有许多特征,可变插值等,但最重要的是,对于这个问题,它们可以是多线的.

模板文字由反引号分隔:

var html = `
  <div>
    <span>Some HTML here</span>
  </div>
`;
Run Code Online (Sandbox Code Playgroud)

(注意:我不主张在字符串中使用HTML)

浏览器支持是可以的,但您可以使用转换器更兼容.


原ES5答案:

Javascript没有here-document语法.但是,你可以逃避文字换行符:

"foo \
bar"
Run Code Online (Sandbox Code Playgroud)

  • 请注意:某些浏览器会在延续时插入换行符,有些则不会. (221认同)
  • @Nate在[ECMA-262第5版](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)第7.8.4节中规定并称为*LineContinuation*: "行终止符不能出现在字符串文字中,除非作为*LineContinuation*的一部分产生空字符序列.使行终止符字符成为字符串文字的字符串值的一部分的正确方法是使用转义序列,例如\n或\ u000A." (47认同)
  • Visual Studio 2010似乎也被这种语法搞糊涂了. (34认同)
  • 当浏览器不一致地对待它时,我不明白为什么你会这样做.多行中的"line1 \n"+"line2"足够可读,并保证您的行为一致. (15认同)
  • "浏览器支持正常"...... IE11不支持 - 不行 (8认同)
  • 总而言之,这似乎是最直接的方法,与所有浏览器兼容,至少回到IE6(可能更早),只要你不关心是否可以在每一行的末尾添加额外的换行符.有谁知道哪些浏览器/版本添加换行符,哪些没有? (7认同)
  • 这种语法非常适合永远不会在反斜杠和换行符之间放置空格的机器.其他人都必须将他们的代码粘贴到SO的评论编辑器中,以查看`\`和\之间突出显示的区别 (3认同)
  • `'line1'+'\n'`...这有什么问题? (2认同)
  • 这个解决方案并没有错 - 但显然不是最好的.很难过这里有如此高的数量.向下滚动以阅读更好的解决方案. (2认同)
  • 浏览器支持实际上**不**好。IE 给出该字符的“无效字符”错误。不明白怎么会有这么多人点赞 (2认同)

Dev*_*ode 1253

ES6更新:

正如第一个回答所提到的,使用ES6/Babel,您现在可以使用反引号创建多行字符串:

const htmlString = `Say hello to 
multi-line
strings!`;
Run Code Online (Sandbox Code Playgroud)

插值变量是一种流行的新功能,它带有反向划分的字符串:

const htmlString = `${user.name} liked your post about strings`;
Run Code Online (Sandbox Code Playgroud)

这只是简化为连接:

user.name + ' liked your post about strings'
Run Code Online (Sandbox Code Playgroud)

原ES5答案:

Google的JavaScript样式指南建议使用字符串连接而不是转义换行符:

不要这样做:

var myString = 'A rather long string of English text, an error message \
                actually that just keeps going and going -- an error \
                message to make the Energizer bunny blush (right through \
                those Schwarzenegger shades)! Where was I? Oh yes, \
                you\'ve got an error and all the extraneous whitespace is \
                just gravy.  Have a nice day.';
Run Code Online (Sandbox Code Playgroud)

每行开头的空格在编译时无法安全剥离; 斜杠后的空格会导致棘手的错误; 虽然大多数脚本引擎支持这一点,但它不是ECMAScript的一部分.

请改用字符串连接:

var myString = 'A rather long string of English text, an error message ' +
               'actually that just keeps going and going -- an error ' +
               'message to make the Energizer bunny blush (right through ' +
               'those Schwarzenegger shades)! Where was I? Oh yes, ' +
               'you\'ve got an error and all the extraneous whitespace is ' +
               'just gravy.  Have a nice day.';
Run Code Online (Sandbox Code Playgroud)

  • @MattBrowne谷歌的建议已经由他们记录,按照重要性的顺序:(1)每行开头的空白[在这个例子中,你不希望你的字符串中有空格,但它在代码中看起来更好](2)斜杠之后的空格会导致棘手的错误[如果你用'\`而不是'\\`结束一行很难注意到]和(3)虽然大多数脚本引擎支持这一点,但它不是ECMAScript [即为什么使用非标准功能?]记住它是一个样式指南,它使代码易于阅读+维护+调试:不只是"它工作"正确. (26认同)
  • 我不明白谷歌的建议.除了极端旧的浏览器之外的所有浏览器都支持反斜杠后跟换行方法,并且将来会继续这样做以实现向后兼容性.你需要避免它的唯一一次是你需要确保在每一行的末尾添加一个且只有一个换行符(或没有换行符)(另请参阅我对已接受答案的评论). (19认同)
  • 请注意,IE11,Firefox 31,Chrome 35或Safari 7不支持模板字符串.请参阅http://kangax.github.io/compat-table/es6/ (6认同)
  • 令人惊讶的是,这么多年过去了,字符串连接仍然是最好/最安全/最合规的方式。模板文字(上面的答案)在 IE 中不起作用,转义行只是一团糟,你很快就会后悔 (3认同)
  • 艰难地发现旧版本的 Android 不支持反引号,因此如果您有一个使用 webView 的 Android 应用程序,您的反引号会导致您的应用程序无法运行! (3认同)

Koo*_*Inc 665

这种模式text = <<"HERE" This Is A Multiline String HERE在js中不可用(我记得在我很好的旧Perl时代使用它).

为了保持对复杂或长多行字符串的监督,我有时使用数组模式:

var myString = 
   ['<div id="someId">',
    'some content<br />',
    '<a href="#someRef">someRefTxt</a>',
    '</div>'
   ].join('\n');
Run Code Online (Sandbox Code Playgroud)

或者匿名模式已经显示(转义换行符),这可能是代码中的一个丑陋的块:

    var myString = 
       '<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';
Run Code Online (Sandbox Code Playgroud)

这是另一个奇怪但有效的'技巧' 1:

var myString = (function () {/*
   <div id="someId">
     some content<br />
     <a href="#someRef">someRefTxt</a>
    </div>        
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
Run Code Online (Sandbox Code Playgroud)

外部编辑:jsfiddle

ES20xx支持使用模板字符串跨多行生成字符串:

let str = `This is a text
    with multiple lines.
    Escapes are interpreted,
    \n is a newline.`;
let str = String.raw`This is a text
    with multiple lines.
    Escapes are not interpreted,
    \n is not a newline.`;
Run Code Online (Sandbox Code Playgroud)

1注意:在缩小/混淆代码后,这将丢失

  • 阵列模式更具可读性,应用程序的性能损失通常可以忽略不计.正如该perf测试所示,即使IE7每秒也可以进行数万次操作. (71认同)
  • 请不要使用阵列模式.在大多数情况下,它将比普通的字符串连接慢. (33认同)
  • @KooiInc您的测试从已创建的数组开始,这会使结果出现偏差.如果添加数组的初始化,则直接连接更快http://jsperf.com/string-concat-without-sringbuilder/7请参阅http://stackoverflow.com/questions/51185/are-javascript-strings-immutable -do-i-need-a-string-builder-in-javascript/4717855#4717855作为换行的技巧,它可能没关系,但它肯定做的工作比它应该做的更多 (26认同)
  • +1是一个优雅的选择,不仅在所有浏览器中以相同的方式工作,但也是面向未来的. (19认同)
  • @BMiner:1)"过早优化是所有邪恶的根源" - 唐纳德克努特,以及2)'可读性'在旁观者的眼中 (9认同)
  • 小心"功能评论"解决方案.请记住,只要您想要最小化JS代码,您的评论就会被删除. (4认同)
  • 这是我最喜欢的方式(它看起来不错),并且足够快以至于我愿意为代码可读性带来轻微的速度. (3认同)
  • 我个人只是连接字符串,并在JS缩小并组合字符串时解决性能问题. (3认同)
  • 在*大多数情况下......你还包括分配/构建阵列所需的时间吗?无论如何......它比连接数组更具可读性. (2认同)
  • @Kooilnc:有些浏览器可以将几个文字连接编译成单个文字字符串,而且在机器代码中也可以.基准测试也应该尝试大量的字符串变量,这与join()的公平比较. (2认同)
  • @RoyTinker:随意自己做一个jsperf.com测试,或者在我的测试中捣乱;) (2认同)
  • 你可以做一个小函数来做快速连接:function fastjoin(array){out =''; for(i in array){out + = i; 退出; } (2认同)
  • @bat根据jsperf(9.72亿vs 100万操作/秒),在使用Firefox 32的Mac 10.9上进行测试时,连接比连接慢"100%". (2认同)
  • 除非这是在一百万个嵌套循环内并在马铃薯上运行,否则效率可能与可读性无关.数组为+1 (2认同)

Jor*_*dão 340

可以在纯JavaScript中使用多行字符串.

此方法基于函数的序列化,该函数被定义为依赖于实现.它在大多数浏览器中都有效(见下文),但不能保证它将来仍能使用,所以不要依赖它.

使用以下功能:

function hereDoc(f) {
  return f.toString().
      replace(/^[^\/]+\/\*!?/, '').
      replace(/\*\/[^\/]+$/, '');
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里 - 像这样的文件:

var tennysonQuote = hereDoc(function() {/*!
  Theirs not to make reply,
  Theirs not to reason why,
  Theirs but to do and die
*/});
Run Code Online (Sandbox Code Playgroud)

该方法已在以下浏览器中成功测试过(未提及=未测试):

  • IE 4 - 10
  • Opera 9.50 - 12(不是9-)
  • Safari 4 - 6(不是3-)
  • Chrome 1 - 45
  • Firefox 17 - 21(不是16-)
  • Rekonq 0.7.0 - 0.8.0
  • Konqueror 4.7.4不支持

但是要小心你的缩放器.它往往会删除评论.对于YUI压缩器,/*!将保留以(与我使用的)相似的注释.

我认为真正的解决方案是使用CoffeeScript.

  • 什么!?创建和反编译函数以将多行注释破解为多行字符串?现在*那是*丑陋的. (220认同)
  • 它实际上是_beyond_丑陋...虽然,没有_decompiling_涉及...... (10认同)
  • http://jsfiddle.net/fqpwf/适用于Chrome 13和IE8/9,但不适用于FF6.我讨厌说出来,但我喜欢它,如果它可能是每个浏览器的故意特征(因此它不会消失),我会使用它. (4认同)
  • @uosɐſ:它是故意的,它必须在规范中;或者如此广泛使用,浏览器制造商不想删除这个“意外”功能。感谢您的实验...尝试一些咖啡脚本。 (3认同)
  • a.toString().substring(15, a.toString().length-4) 也可以工作,并且不需要扫描整个字符串(尽管它很可能会扫描并且计数无论如何都会使它再次扫描。哦,好吧.) (2认同)
  • 非常方便.我正在将它用于(Jasmine)单元测试,但是将其用于生产代码. (2认同)
  • @JamesWilkins:确实你没有。事实上,你甚至不应该首先使用这个解决方案 (2认同)

ale*_*lex 201

你可以这样做...

var string = 'This is\n' +
'a multiline\n' + 
'string';
Run Code Online (Sandbox Code Playgroud)


Luk*_*uke 133

我想出了这种多线式弦乐器的装配方法.由于将函数转换为字符串也会返回函数内的任何注释,您可以使用多行注释/**/将注释用作字符串.你只需要修剪两端,你就有了你的字符串.

var myString = function(){/*
    This is some
    awesome multi-lined
    string using a comment 
    inside a function 
    returned as a string.
    Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)

alert(myString)
Run Code Online (Sandbox Code Playgroud)

  • 还要注意剥离注释的缩小器......:D (45认同)
  • 这绝对是可怕的.我喜欢它(虽然你可能需要进行正则表达式匹配,因为我不确定`toString()`的空白有多精确. (37认同)
  • 您可以在JavaScript领域中做一些奇怪的事情。虽然老实说,您永远不要使用此功能。 (4认同)
  • 这就是为什么我们不能拥有好东西. (3认同)
  • 该解决方案似乎不适用于 Firefox,也许这是浏览器的安全功能?编辑:没关系,它仅不适用于 Firefox 版本 16。 (2认同)

Pet*_*rch 87

我很惊讶我没有看到这个,因为它适用于我测试过的所有地方,对于例如模板非常有用:

<script type="bogus" id="multi">
    My
    multiline
    string
</script>
<script>
    alert($('#multi').html());
</script>
Run Code Online (Sandbox Code Playgroud)

有没有人知道有HTML的环境但它不起作用?

  • 实际上,这是HTML而不是Javascript: - / (27认同)
  • 在任何地方,您都不希望将字符串放入单独且远程的脚本元素中. (23认同)
  • 有效的反对意见!它并不完美.但对于模板而言,这种分离不仅可以,而且甚至可能会受到鼓励. (9认同)
  • 但是,在javascript中获取多行字符串的任务可以通过这种方式完成 (5认同)
  • 我更喜欢将超过 80/120 个字符的所有内容拆分为多行,恐怕这不仅仅是模板。我现在更喜欢“line1”+“line2”语法。它也是最快的(尽管对于非常大的文本来说这可能会与它相媲美)。不过,这是一个不错的技巧。 (2认同)

Tom*_*ech 49

我通过输出div,使其隐藏,并在需要时通过jQuery调用div id来解决这个问题.

例如

<div id="UniqueID" style="display:none;">
     Strings
     On
     Multiple
     Lines
     Here
</div>
Run Code Online (Sandbox Code Playgroud)

然后,当我需要获取字符串时,我只使用以下jQuery:

$('#UniqueID').html();
Run Code Online (Sandbox Code Playgroud)

这会在多行返回我的文字.如果我打电话

alert($('#UniqueID').html());
Run Code Online (Sandbox Code Playgroud)

我明白了:

在此输入图像描述

  • 如果字符串是HTML怎么办? (4认同)
  • $( '#的UniqueID').内容() (4认同)
  • 谢谢你!这是我发现的唯一解决我的问题的答案,其中涉及未知的字符串,可能包含直接插入代码的单引号和双引号的任意组合,没有预编码的机会.(它来自一个创建JS的模板语言 - 仍然来自可靠的来源而不是表单提交,所以它不是完全痴迷的). (2认同)

小智 31

在 JavaScript 中打印多行字符串的一种简单方法是使用由反引号 (``) 表示的模板文字(模板字符串)。您还可以在模板字符串中使用变量(` name is ${value}`)

你也可以

const value = `multiline`
const text = `This is a
${value}
string in js`;
console.log(text);
Run Code Online (Sandbox Code Playgroud)


jpf*_*ire 27

使用脚本标签:

  • <script>...</script>包含多行文字的块添加到head标记中;
  • 按原样获取多行文本...(注意文本编码:UTF-8,ASCII)

    <script>
    
        // pure javascript
        var text = document.getElementById("mySoapMessage").innerHTML ;
    
        // using JQuery's document ready for safety
        $(document).ready(function() {
    
            var text = $("#mySoapMessage").html(); 
    
        });
    
    </script>
    
    <script id="mySoapMessage" type="text/plain">
    
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="...">
           <soapenv:Header/>
           <soapenv:Body>
              <typ:getConvocadosElement>
                 ...
              </typ:getConvocadosElement>
           </soapenv:Body>
        </soapenv:Envelope>
    
        <!-- this comment will be present on your string -->
        //uh-oh, javascript comments...  SOAP request will fail 
    
    
    </script>
    
    Run Code Online (Sandbox Code Playgroud)


Vig*_*ian 27

有多种方法可以实现这一目标

1.斜线连接

  var MultiLine=  '1\
    2\
    3\
    4\
    5\
    6\
    7\
    8\
    9';
Run Code Online (Sandbox Code Playgroud)

2.定期连接

var MultiLine = '1'
+'2'
+'3'
+'4'
+'5';
Run Code Online (Sandbox Code Playgroud)

3.阵列加入连接

var MultiLine = [
'1',
'2',
'3',
'4',
'5'
].join('');
Run Code Online (Sandbox Code Playgroud)

性能方面,Slash连接(第一个)是最快的.

有关性能的更多详细信息,请参阅此测试用例

更新:

使用ES2015,我们可以利用其模板字符串功能.有了它,我们只需要使用反向标记来创建多行字符串

例:

 `<h1>{{title}}</h1>
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div><label>name: </label>{{hero.name}}</div>
  `
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是你刚刚在页面上已经回流了五年,但是以更清洁的方式. (11认同)

sem*_*nte 24

我喜欢这种语法和压句:

string = 'my long string...\n'
       + 'continue here\n'
       + 'and here.';
Run Code Online (Sandbox Code Playgroud)

(但实际上不能被视为多行字符串)

  • 将+放在开头允许一个注释掉该行,而不必在序列的第一行/最后一行编辑其他行. (7认同)
  • 我使用它,除了我在前一行的末尾加上'+',以清楚说明语句在下一行继续.你的方式确实更均匀地排列缩进. (3认同)
  • 我更喜欢前面的+,因为在视觉上我不需要扫描到行的末尾就知道下一个是延续. (3认同)

Niv*_*Niv 18

在这里找到了很多过度设计的答案。我认为最好的两个答案是:

1:

 let str = `Multiline string.
            foo.
            bar.`
Run Code Online (Sandbox Code Playgroud)

最终记录:

Multiline string.
           foo.
           bar.  
Run Code Online (Sandbox Code Playgroud)

2:

let str = `Multiline string.
foo.
bar.`
Run Code Online (Sandbox Code Playgroud)

这会正确记录它,但如果 str 嵌套在函数/对象等内部,则在脚本文件中它会很丑陋......:

Multiline string.
foo.
bar.
Run Code Online (Sandbox Code Playgroud)

我用正则表达式非常简单地回答了正确记录 str 的问题:

let str = `Multiline string.
           foo.
           bar.`.replace(/\n +/g, '\n');
Run Code Online (Sandbox Code Playgroud)

请注意,这不是完美的解决方案,但如果您确定新行 (\n) 之后至少会出现一个空格(+ 表示至少出现一次),那么它就可以工作。它还适用于 *(零个或多个)。

您可以更明确地使用 {n,} 表示至少出现 n 次。

  • 你为什么不直接 `[ "line", "line2", "line3" ].join("\n")`。 (7认同)

mig*_*iam 17

有这个图书馆使它美丽:

https://github.com/sindresorhus/multiline

之前

var str = '' +
'<!doctype html>' +
'<html>' +
'   <body>' +
'       <h1>? unicorns</h1>' +
'   </body>' +
'</html>' +
'';
Run Code Online (Sandbox Code Playgroud)

var str = multiline(function(){/*
<!doctype html>
<html>
    <body>
        <h1>? unicorns</h1>
    </body>
</html>
*/});
Run Code Online (Sandbox Code Playgroud)

  • @HuiiTan Docs声明它也适用于浏览器.这是有道理的 - 它只是`Function.prototype.String()`. (3认同)

mpl*_*jan 13

Downvoters:此代码仅供参考.

这已经在Mac上的Fx 19和Chrome 24中进行了测试

DEMO

var new_comment; /*<<<EOF 
    <li class="photobooth-comment">
       <span class="username">
          <a href="#">You</a>
       </span>
       <span class="comment-text">
          $text
       </span>
       <span class="comment-time">
          2d
       </span>
    </li>
EOF*/
// note the script tag here is hardcoded as the FIRST tag 
new_comment=document.currentScript.innerHTML.split("EOF")[1]; 
alert(new_comment.replace('$text','Here goes some text'));
Run Code Online (Sandbox Code Playgroud)

  • 那太可怕了.+1.您可以使用[document.currentScript](https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript)代替getElement ... (12认同)
  • 我从来没有勇敢在生产代码中使用这种技术,但我在其中使用它的很多是在单元测试中,通常最容易将某些结构的值转储为(相当长的)字符串并将其与应该是什么. (2认同)

Kam*_*ski 11

精确的

Ruby生成"This\nIs\nA\nMultiline\nString\n"- 下面的 JS 生成完全相同的字符串

text = `This
Is
A
Multiline
String
`

// TEST
console.log(JSON.stringify(text));
console.log(text);
Run Code Online (Sandbox Code Playgroud)

这是对Lonnie Best 答案的改进,因为他的答案中的换行符与 ruby​​ 输出中的位置不完全相同


Tyl*_*ler 10

总结一下,我在用户javascript编程中尝试了2种方法(Opera 11.01):

所以我推荐Opera用户JS用户的工作方法.与作者所说的不同:

它不适用于Firefox或Opera; 仅适用于IE,Chrome和Safari.

它可以在Opera 11中运行.至少在用户JS脚本中.太糟糕了,我不能评论个别答案或提出答案,我会马上做.如果可能,有特权的人请为我做.


mik*_*ana 9

2015年更新:现在已经六年了:大多数人使用模块加载器,主模块系统都有加载模板的方法.它不是内联的,但最常见的多行字符串类型是模板,并且模板通常应该保留在JS之外.

require.js:'require text'.

使用require.js'text'插件,在template.html中使用多行模板

var template = require('text!template.html')
Run Code Online (Sandbox Code Playgroud)

NPM/browserify:'brfs'模块

Browserify 使用'brfs'模块加载文本文件.这实际上会将您的模板构建到捆绑的HTML中.

var fs = require("fs");
var template = fs.readFileSync(template.html', 'utf8');
Run Code Online (Sandbox Code Playgroud)

简单.


seo*_*seo 9

如果您愿意使用转义换行符,可以很好地使用它们. 它看起来像带有页面边框的文档.

在此输入图像描述

  • 这不会添加多余的空格吗? (2认同)

小智 8

这适用于IE,Safari,Chrome和Firefox:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<div class="crazy_idea" thorn_in_my_side='<table  border="0">
                        <tr>
                            <td ><span class="mlayouttablecellsdynamic">PACKAGE price $65.00</span></td>
                        </tr>
                    </table>'></div>
<script type="text/javascript">
    alert($(".crazy_idea").attr("thorn_in_my_side"));
</script>
Run Code Online (Sandbox Code Playgroud)

  • 考虑一下.你认为它有效吗?你不觉得它会导致显示问题吗? (6认同)
  • 为什么选票呢?这是一个创造性的答案,如果不是很实用! (5认同)
  • 不,这不对.应该使用模板:$ .tmpl()(http://api.jquery.com/tmpl/)或EJS(http://embeddedjs.com/getting_started.html)等.downvotes的一个原因是它真的远离有效的代码,使用它可能会导致巨大的显示问题. (2认同)

poc*_*sov 8

我对/sf/answers/1089065771/的扩展.它希望以/*! any multiline comment */符号形式发表评论!用于防止通过缩小去除(至少对于YUI压缩器)

Function.prototype.extractComment = function() {
    var startComment = "/*!";
    var endComment = "*/";
    var str = this.toString();

    var start = str.indexOf(startComment);
    var end = str.lastIndexOf(endComment);

    return str.slice(start + startComment.length, -(str.length - end));
};
Run Code Online (Sandbox Code Playgroud)

例:

var tmpl = function() { /*!
 <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
    </ul>
 </div>
*/}.extractComment();
Run Code Online (Sandbox Code Playgroud)


Lon*_*est 8

javascript中的等价物是:

var text = `
This
Is
A
Multiline
String
`;
Run Code Online (Sandbox Code Playgroud)

这是规范.请参阅本页底部的浏览器支持.这里有一些例子.


Ste*_*ger 7

您可以使用TypeScript(JavaScript SuperSet),它支持多行字符串,并转换回纯JavaScript而无需开销:

var templates = {
    myString: `this is
a multiline
string` 
}

alert(templates.myString);
Run Code Online (Sandbox Code Playgroud)

如果您想用纯JavaScript完成相同的操作:

var templates = 
{
 myString: function(){/*
    This is some
    awesome multi-lined
    string using a comment 
    inside a function 
    returned as a string.
    Enjoy the jimmy rigged code.
*/}.toString().slice(14,-3)

}
alert(templates.myString)
Run Code Online (Sandbox Code Playgroud)

请注意,iPad/Safari不支持 'functionName.toString()'

如果你有很多遗留代码,你也可以在TypeScript中使用普通的JavaScript变体(用于清理):

interface externTemplates
{
    myString:string;
}

declare var templates:externTemplates;

alert(templates.myString)
Run Code Online (Sandbox Code Playgroud)

并且您可以使用普通JavaScript变体中的多行字符串对象,您可以将模板放入另一个文件(可以在捆绑包中合并).

您可以在http://www.typescriptlang.org/Playground上尝试TypeScript


Wil*_*een 7

在 Javascrips 中制作多行字符串的最简单方法是使用反引号 ( `` )。这允许您创建多行字符串,您可以在其中插入变量${variableName}

例子:

let name = 'Willem'; 
let age = 26;

let multilineString = `
my name is: ${name}

my age is: ${age}
`;

console.log(multilineString);
Run Code Online (Sandbox Code Playgroud)

兼容性:

  • 它是在ES6//es2015
  • 现在所有主要浏览器供应商都原生支持它(Internet Explorer 除外)

在此处检查 Mozilla 文档中的确切兼容性


ear*_*l3s 5

ES6允许您使用反引号在多行上指定字符串.它被称为模板文字.像这样:

var multilineString = `One line of text
    second line of text
    third line of text
    fourth line of text`;
Run Code Online (Sandbox Code Playgroud)

使用反引号可以在NodeJS中使用,并且Chrome,Firefox,Edge,Safari和Opera都支持它.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals


jen*_*sto 5

ES6的实现方式是使用模板文字:

const str = `This 

is 

a

multiline text`; 

console.log(str);
Run Code Online (Sandbox Code Playgroud)

在这里更多参考


sau*_*ito 5

您可以使用标记模板来确保获得所需的输出。

例如:

// Merging multiple whitespaces and trimming the output

const t = (strings) => { return strings.map((s) => s.replace(/\s+/g, ' ')).join("").trim() }
console.log(t`
  This
  Is
  A
  Multiline
  String
`);
// Output: 'This Is A Multiline String'

// Similar but keeping whitespaces:

const tW = (strings) => { return strings.map((s) => s.replace(/\s+/g, '\n')).join("").trim() }
console.log(tW`
  This
  Is
  A
  Multiline
  String
`);
// Output: 'This\nIs\nA\nMultiline\nString'
Run Code Online (Sandbox Code Playgroud)