3492

如何将带有多行字符串的Ruby代码转换为JavaScript?

text=<<“此处”这个A类多行字符串酒店雇员和饭馆雇员
0

43个答案43

重置为默认值
4500

更新:

ECMAScript 6(ES6)引入了一种新的文本类型,即模板文字它们有很多特性,变量插值等等,但对于这个问题最重要的是,它们可以是多行的。

模板文字由分隔反勾号:

var html=变量html=`<div><span>此处显示一些HTML</span></div>`;

(注意:我不提倡在字符串中使用HTML)

浏览器支持正常,但您可以使用输送器更加兼容。


ES5原始答案:

Javascript没有here-document语法。但是,您可以避开文字换行符,它很接近:

“foo\巴“
22
  • 283
    警告:有些浏览器会在继续时插入新行,有些则不会。 评论 2009年4月30日2:22
  • 45
    VisualStudio2010似乎也被这种语法弄糊涂了。 评论 2011年4月17日21:58
  • 63
    @Nate在ECMA-262第5版第7.8.4节和调用线条延续:“行结束符字符不能出现在字符串文本中,除非作为线条延续生成空字符序列。要使行结束符字符成为字符串文字的String值的一部分,正确的方法是使用转义序列,例如\n或\u000A。"
    – 一些
    评论 2012年9月25日2:28
  • 24
    我不明白为什么当浏览器不一致地对待它时你会这样做。跨多行的“line1\n”+“line2”足够可读,保证行为一致。 评论 2013年3月20日20:14
  • 25
    “浏览器支持正常”。。。IE11不支持-不正常 评论 2017年5月25日5:18
1550

ES6更新:

正如第一个答案所提到的,使用ES6/Babel,您现在只需使用反勾号即可创建多行字符串:

const htmlString=`问候多线字符串!`;

插值变量是一项流行的新功能,它带有反时限分隔字符串:

const htmlString=`${user.name}喜欢您关于字符串的帖子`;

这可以归结为串联:

user.name+“喜欢你关于字符串的帖子”

ES5原始答案:

谷歌JavaScript风格指南建议使用字符串串联而不是转义换行:

不要这样做:

var myString='一个相当长的英文文本字符串,错误消息\事实上,这只是一个错误\让活力兔子脸红的信息(通过\那些施瓦辛格墨镜)!我在哪里?哦,是的\您有一个错误,所有多余的空白都是\只是肉汁。祝你今天愉快;

在编译时,不能安全地去除每一行开头的空白;斜杠后面的空格将导致棘手的错误;虽然大多数脚本引擎都支持这一点,但它不是ECMAScript的一部分。

使用字符串串联:

var myString='相当长的英语文本字符串,错误消息'+“实际上,这只是一个错误”+“让活力兔脸红的信息(一直到现在”+“那些施瓦辛格墨镜)!我在哪里?哦,是的,”+'您有一个错误,所有多余的空白都是'+“只是肉汁。祝你今天愉快;
10
  • 30
    我不理解谷歌的建议。除极旧的浏览器外,所有浏览器都支持反斜杠后跟换行方法,为了向后兼容,将来还会继续这样做。唯一需要避免的是,如果您需要确保在每行末尾添加一个且只有一个换行符(或没有换行符)(另请参阅我对已接受答案的评论)。 评论 2013年2月26日18:40
  • 8
    请注意,IE11、Firefox 31、Chrome 35或Safari 7不支持模板字符串。请参见kangax.github.io/compat-table/es6 评论 2014年5月24日2:41
  • 46
    @他们已经记录了MattBrowne Google的建议,按照原因的重要性排序:(1)每行开头的空白[在本例中,您不希望字符串中有空白,但它在代码中看起来更好](2)斜杠后面的空白将导致棘手的错误[如果您以\虽然大多数脚本引擎都支持这一点,但它不是ECMAScript的一部分[即为什么使用非标准功能?]记住这是一个样式指南,它是关于使代码易于阅读+维护+调试:而不仅仅是“它工作正常”。 评论 2016年7月31日20:29
  • 令人惊讶的是,这么多年来,字符串串联仍然是实现这一点的最佳/最安全/最兼容的方法。模板文字(上面的答案)在IE中不起作用,转义行只是一团乱麻,你很快就会后悔 评论 2016年11月11日12:31
  • 很难发现旧版本的Android不支持反勾号,因此如果你有一个使用webView的Android应用程序,你的反勾号会导致你的应用程序无法运行! 评论 2019年6月26日19:45
738

图案text=<<“HERE”这是一个多行字符串在js中不可用(我记得在我的Perl好日子里经常使用它)。

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

var myString=['<div id=“someId”>','一些内容<br/>','<a href=“#someRef”>someRefTxt</a>','</div>'].join(“\n”);

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

var myString='<div id=“someId”>\一些内容<br/>\someRefTxt\</div>';

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

var myString=(函数(){/*<div id=“someId”>一些内容<br/>someRefTxt</a></div>*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];

外部编辑:J小提琴

ES20xx系列支持使用跨越多行的字符串模板字符串:

let str=`这是一个文本具有多行。解释逃逸,\n是一个换行符;let str=String.raw`这是一个文本具有多行。不解释Escapes,\n不是换行符;

1注意:缩小/混淆代码后,此信息将丢失

32
  • 40
    请不要使用数组模式。在大多数情况下,它将比普通字符串连接慢。
    – B衬里
    评论 2011年7月17日12:39
  • 86
    阵列模式更具可读性,应用程序的性能损失通常可以忽略不计。正如性能测试所示,即使是IE7也可以每秒执行数万次操作。 评论 2011年8月20日8:16
  • 23
    +1表示一个优雅的替代方案,它不仅在所有浏览器中都能以相同的方式工作,而且还可以抵御未来。
    – 帕维尔
    评论 2012年5月21日6:06
  • 28
    @KooiInc您的测试从已经创建的数组开始,这会歪曲结果。如果添加数组的初始化,直接串联会更快jsperf.com/string-concat-不带stringbuilder/7请参见stackoverflow.com/questions/51185/…作为新行的一个技巧,它可能还可以,但它确实做了比它应该做的更多的工作 评论 2013年8月4日8:02
  • 12
    @BMiner:1)“过早优化是万恶之源”——Donald Knuth,2)“可读性”是旁观者的眼中钉
    – 用户2418182
    评论 2014年3月25日15:27
370

可以在纯JavaScript中具有多行字符串。

此方法基于函数的序列化,即定义为依赖于实现。它在大多数浏览器中都能正常工作(见下文),但不能保证它在未来仍能正常工作,所以不要依赖它。

使用以下功能:

此处的函数Doc(f){return f.toString()。替换(/^[^\/]+\/\*!?/,'')。替换(/\*\/[^\/]+$/,'');}

您可以有这样的here-documents:

var tennysonQuote=hereDoc(函数(){/*!他们不回答,他们没有理由,他们只有做和死*/});

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

  • IE 4-10
  • 歌剧9.50-12(非9-)
  • Safari 4-6(不在3-中)
  • 铬1-45
  • Firefox 17-21(不在16-)
  • Rekonq 0.7.0-0.8.0
  • Konqueror 4.7.4中不支持

不过,要小心你的迷你鞋。它往往会删除评论。对于YUI压缩机,注释以开头/*!(就像我用过的一样)会被保存下来。

我认为真实的解决方案是使用咖啡脚本.

ES6 UPDATE:您可以使用反勾号,而不是创建带有注释的函数并对注释运行toString。正则表达式需要更新为仅带空格。您还可以使用字符串原型方法进行此操作:

设foo=`酒吧喜欢蛋糕baz喜欢啤酒啤酒爱人们`.remove缩进()

应该有人写这个。removeIndentation字符串方法…;)

23
  • 287
    什么!?创建并反编译一个函数,将多行注释破解为多行字符串?现在那是丑陋。
    – 福尔
    评论 2011年6月17日15:49
  • 5
    jsfiddle.net/fqpwf适用于Chrome 13和IE8/9,但不适用于FF6。我不想这么说,但我喜欢它,如果它是每个浏览器的故意功能(这样它就不会消失),我会使用它。 评论 2011年9月9日21:36
  • @uos:如果它是有意的,它必须在规格中;或者说使用得如此广泛,以至于浏览器制造商不想删除这个“偶然”的功能。不过还是要感谢你的实验。。。试试咖啡描述。
    – 约旦
    评论 2011年9月10日2:37
  • 2
    a.toString().substring(15,a.toString().length-4)也可以,不需要扫描整个字符串(尽管很可能会扫描,但计数会使它再次扫描。哦,好的。) 评论 2012年1月8日23:53
  • 非常方便。我在(Jasmine)单元测试中使用它,但在生产代码中避免使用它。
    – 杰森
    评论 2012年7月13日5:23
222

你可以这样做。。。

var string='这是\n'+“多行\n”+“string”;
186

我想出了一个非常巧妙的多行字符串方法。由于将函数转换为字符串也会返回函数内的任何注释,因此可以使用多行注释/**/将注释用作字符串。你只需剪掉末端,你就有了你的绳子。

var myString=函数(){/*这是一些令人敬畏的多线使用注释的字符串函数内部作为字符串返回。享受jimmy操纵的代码。*/}.toString().slice(14,-3)警报(myString)
10
  • 50
    这绝对可怕。我喜欢它(尽管您可能需要进行正则表达式匹配,因为我不确定空白的精确程度toString()是。 评论 2013年4月7日21:53
  • 2
    这个解决方案在firefox中似乎不起作用,也许它是浏览器的安全功能?编辑:无论如何,它只适用于Firefox版本16。 评论 2013年6月6日19:18
  • 59
    还要注意那些剥离评论的迷你们……:D类 评论 2013年10月22日19:07
  • 9
    这就是为什么我们不能拥有美好的事物。 评论 2018年10月15日18:39
  • 8
    你可以在javascript中做一些奇怪的事情。尽管说实话,你不应该用这个。
    – 卢克
    评论 2018年10月25日23:25
94

我很惊讶我没有看到这一点,因为它在任何地方都有效,我测试过它,它对模板非常有用:

<script type=“bogus”id=“multi”>我的多行一串</script><脚本>警报($('#multi').html());</script>

有人知道有HTML但不工作的环境吗?

10
  • 25
    在任何地方,您都不想将字符串放在单独且遥远的脚本元素中。 评论 2012年1月9日1:12
  • 10
    一个合理的反对!这并不完美。但对于模板来说,这种分离不仅可以,而且可能会受到鼓励。 评论 2012年2月3日9:03
  • 2
    我更喜欢将超过80/120个字符的内容拆分为多行,恐怕这不仅仅是模板。我现在更喜欢“line1”+“line2”语法。它也是最快的(尽管这可能与真正的大型文本相媲美)。不过这是一个很好的技巧。 评论 2012年2月3日22:51
  • 29
    实际上,这是HTML而不是Javascript:-/ 评论 2012年5月22日8:54
  • 6
    然而,在javascript中获取多行字符串的任务可以这样完成 评论 2013年7月30日21:41
59

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

例如

<div id=“UniqueID”style=“display:none;”>打开多个线在这里</div>

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

$(“#UniqueID”).html();

它以多行返回我的文本。如果我打电话

警报($('#UniqueID').html());

我得到:

在此处输入图像描述

9
  • 4
    谢谢你!这是我找到的唯一解决我问题的答案,它涉及到可能包含单引号和双引号任意组合的未知字符串,这些字符串直接插入到代码中,没有机会进行预编码。(它来自创建JS的模板语言——仍然来自可信的来源,而不是表单提交,所以它并不是完全疯狂的)。
    – 辛烯
    评论 2013年6月23日17:19
  • 这是我从JavaString创建多行javascript字符串变量的唯一方法。 评论 2013年8月6日12:06
  • 4
    如果字符串是HTML怎么办? 评论 2014年1月24日8:39
  • 4
    $(“#UniqueID”).content() 评论 2014年1月24日9:28
  • 1
    @Pacerier我从谷歌和其他网站上读到的所有内容都说,现在谷歌做索引显示:无内容,很可能是由于JavaScript-styled front-ends的流行。(例如,一个带有隐藏/显示功能的FAQ页面。)不过,你需要小心,因为谷歌表示,如果隐藏内容的设计似乎是为了人为地抬高你的SEO排名,他们可能会惩罚你。
    – 加文
    评论 2017年8月8日13:12
34

有多种方法可以实现这一点

1.斜杠拼接

var MultiLine=“1\2\3\4\5\6\7\8\9';

2.常规串联

var MultiLine=“1”+'2'+'3'+'4'+'5';

3.数组连接连接

var多线=['1','2','3','4','5'].join(“”);

性能方面,斜杠串联(第一个)是最快的。

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

更新:

使用2015年欧洲标准,我们可以利用其模板字符串功能。有了它,我们只需要使用回退来创建多行字符串

例子:

`{{title}}</h1><h2>{{hero.name}}详细信息</h2><div><label>id:</label>{hero.id}}<div><label>name:</label>{hero.name}}`
2
  • 11
    我认为这是因为你只是以一种更干净的方式重复了五年来页面上已经出现的内容。 评论 2014年8月2日18:22
  • 斜杠连接不会也包括行开头的空白吗? 评论 2017年5月9日23:39
33

使用脚本标记:

  • 添加<script></脚本>包含多行文本的块标签;
  • 按原样获取多行文本…(注意文本编码:UTF-8,ASCII)

    <脚本>//纯javascriptvar text=document.getElementById(“mySoapMessage”).innerHTML;//使用JQuery的安全文档$(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:标题/><soapenv:正文><典型:getConvocadosElement>...</typ:getConvocadosElement></soapenv:Body></soapenv:信封><!-- 此注释将出现在字符串-->中//呃,javascript注释。。。SOAP请求将失败</script>
  • 我认为这种策略是干净的,而且远远没有得到充分利用。jsrender使用了这一点。 评论 2015年1月9日15:57
  • 我将其用于innerText iso innerHTML,但如何确保保留空白? 评论 2015年7月16日8:53
  • 如果您正在使用ajax查询,也可以使用它们。你可以尝试更改标题xhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);除了在JS中输入错误的注释之外,我不记得还有其他问题。没有问题的空间。 评论 2015年10月28日5:40
32

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

你也可以

const value=`多行`const text=`这是一个${value}js中的字符串`;console.log(文本);

25

我喜欢这种语法和含义:

string='我的长字符串…\n'+'在此处继续\n'+“还有这里。”;

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

4
  • 除了在前一行的末尾加上“+”之外,我使用了这个词,以表明语句在下一行继续。不过,您的方式确实使缩进更加均匀。
    – 肖恩
    评论 2012年10月4日8:54
  • @肖恩,我也用这个,我还是喜欢在每一行的开头加上“+”,最后加上“;”在一条新线上,因为我发现它更“正确”。 评论 2013年11月14日5:06
  • 7
    将+放在开头,这样当它是序列的第一行/最后一行时,就可以注释掉该行,而无需编辑其他行。 评论 2013年12月12日15:38
  • 我也喜欢前面的+,因为从视觉上看,我不需要扫描到行的末尾就知道下一个是一个延续。 评论 2014年5月7日15:40
21

落选者:此代码仅供参考。

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

演示

var新注释/*<<<电动势<li class=“photobooth-comment”><span class=“username”><a href=“#”>您</a>:</span><span class=“comment-text”>$文本</span>@<span class=“comment-time”>二维</span>以前</li>电动势*///注意,这里的script标记被硬编码为FIRST标记new_comment=document.currentScript.innerHTML.split(“EOF”)[1];document.querySelector(“ul”).innerHTML=new_comment.replace('$text','这是一个动态创建的文本');
<ul>

10
  • 17
    这太可怕了+1.您可以使用文档.currentScript而不是getElement。。。
    – 亲欧派
    评论 2015年5月27日10:00
  • 1
    osx的chrome中未定义的“您” 评论 2015年5月27日16:46
  • 1
    jsfiddle-fix格式-我一定是在控制台中全局定义了“you”。现在工作(chrome/osx)。将注释添加到var的好处是,您不在函数上下文中,jsfiddle-function-heredoc函数尽管函数对于类方法来说很酷。无论如何,最好给它传递一个替换{this:th}对象。无论如何,把疯狂的事情推向极限是很有趣的:)
    – 亲欧派
    评论 2015年6月1日16:44
  • 1
    忘掉那些仇恨者吧。这是唯一正确的答案栏ES6。所有其他答案都需要串联、某种计算或转义。这真的很酷,我打算用它来为我的业余爱好制作的游戏添加文档。只要这个技巧不用于任何可能引发错误的东西(我可以看到有人会怎么说“分号,derp。让我们把注释放在下一行。”然后它会破坏你的代码。)但是,这真的是我的业余游戏中的一件大事吗?不,我可以用这个很酷的技巧做一些有用的事情。回答得很好。 评论 2015年7月27日21:10
  • 2
    我从来没有勇气在生产代码中使用过这种技术,但我经常在单元测试中使用这种技术,在这种测试中,最容易将某些结构的值转储为(相当长的)字符串,并将其与“应该”的值进行比较。 评论 2016年2月3日0:00
19

有一个图书馆使它变得美丽:

https://github.com/sindresorhus/multiline网站

之前

var str=“”+'<!doctype html>'+'<html>'+“<正文>”+'<h1>独角兽</h1>'+“</body>”+'</html>'+'';

之后

var str=多行(函数(){/*<!doctype html><html><body><h1>独角兽</h1></body></html>*/});
5
  • 1
    这种支持节点,在浏览器中使用时必须小心。 评论 2014年5月5日8:52
  • @HueiTan Docs表示,它也可以在浏览器中工作。这很有道理-只是功能.原型。字符串(). 评论 2014年7月13日19:14
  • 但是它说“虽然它在浏览器中运行良好,但主要用于Node.js。使用风险自负。虽然在浏览器中工作良好,但它主要用于Node.js。风险自负”(只是要小心XD) 评论 2014年7月14日9:37
  • @HueiTan是的,我读过那部分。但是Function.prototype.toString()非常稳定,并且众所周知。 评论 2014年7月14日10:52
  • 1
    对我来说是最好的答案,因为它至少实现了多行,中间没有所有垃圾(我可以处理开头和结尾的垃圾)。 评论 2014年8月27日6:25
19

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

1:

let str=`多行字符串。福。巴`

最终记录:

多行字符串。福。酒吧。

2:

let str=`多行字符串。食品。巴`

这样可以正确地记录它,但如果str嵌套在函数/对象等中,那么它在脚本文件中会很难看……:

多行字符串。食品。酒吧。

我用regex给出了一个非常简单的答案,它正确地记录了str:

let str=`多行字符串。食品。酒吧。`。替换(/\n+/g,'\n');

请注意,这不是一个完美的解决方案,但如果您确信换行(\n)之后至少会出现一个空格(+表示至少出现一次),那么它是有效的。它也可以使用*(零或更多)。

您可以更明确地使用{n,},这意味着至少出现n次。

1
  • 7
    你为什么不[“line”,“line2”,“line 3”].join(“\n”).
    – 卡兹
    评论 2022年1月21日19:18
12

javascript中的等效项是:

var文本=`这个A类多行字符串`;

这里是规范。请参阅底部的浏览器支持第页。这里有一些示例也是。

12

完全正确

红宝石生产:“这是一个多行字符串”-下面的JS生成完全相同的字符串

text=`此A类多行字符串`//测试console.log(JSON.stringify(文本));console.log(文本);

这是对Lonnie最佳答案因为他的答案中的换行字符与ruby输出中的位置不完全相同

2
  • 文本是字符串为什么是json.stringify? 评论 2020年7月12日11:20
  • 1
    @FlatLander这只是为了测试-看看换行符到底在哪里\n个(与ruby输出(答案中链接的工作示例)相比)-这是Lonnie答案的改进,因为他的答案中的换行字符与ruby输入中的位置不完全相同 评论 2020年7月12日20:51
11

这适用于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='<表border=“0”><tr><td><span class=“mlayouttablecellsdynamic”>套餐价格65.00美元</span></td></tr></table>'></div><script type=“text/javascript”>警报($(“.crady_idea”).attr(“thorn_in_my-side”);</script>
5
  • 8
    想想看。你认为它有效吗?你不认为它会导致显示问题吗? 评论 2012年2月24日1:55
  • 6
    为什么会投反对票?这是一个创造性的答案,如果不是很实用的话! 评论 2012年2月29日2:32
  • 不,不是。应该使用模板:$.tmpl()(api.jquery.com/tmpl),或EJS(embeddedjs.com/getting_started.html)否决票的一个原因是它离有效代码很远,使用它可能会导致巨大的显示问题。 评论 2012年3月24日0:07
  • 我希望没有人在实践中使用过这个答案,但这是一个好主意 评论 2015年3月13日23:48
  • 当您有'在html中。在这种情况下,您可能不得不使用html实体&#39;. 评论 2020年12月18日4:25
11

总之,我尝试了用户javascript编程(Opera 11.01)中列出的两种方法:

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

它对firefox或opera不起作用;仅适用于IE、chrome和safari。

这在歌剧11中确实有效。至少在用户JS脚本中。遗憾的是,我不能对个人的答案发表评论或投票支持,我会立即这样做。如果可能的话,请有更高权限的人帮我做。

2
  • 这是我的第一个实际评论。我在两天前获得了投赞成票的特权,所以我立即对上面提到的一个答案投了赞成票。感谢所有支持我微弱的帮助尝试的人。
    – 泰勒
    评论 2011年7月24日12:34
  • 感谢所有投票支持这个答案的人:我现在有足够的特权发表正常的评论!再次感谢。
    – 泰勒
    评论 2012年8月31日2:41
10

我的分机https://stackoverflow.com/a/15558082/80404.它需要表单中的注释/*! 任何多行注释*/where符号!用于防止通过缩小来移除(至少对于YUI压缩机)

Function.prototype.extractComment=函数(){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));};

例子:

var tmpl=函数(){/*!<div class=“navbar-collapse崩溃”><ul class=“nav-navbar-nav”></ul></div>*/}.extractComment();
9

2015年更新:六年过去了:大多数人使用模块加载器,而主要模块系统都有加载模板的方法。它不是内联的,但最常见的多行字符串类型是模板,以及无论如何,模板通常不应出现在JS中.

require.js:“需要文本”。

使用require.js“文本”插件中的多行模板模板.html

var-template=require('text!template.html’)

NPM/browserify:“brfs”模块

浏览验证使用“brfs”模块以加载文本文件。这实际上会将模板构建到捆绑的HTML中。

var fs=要求(“fs”);var template=fs.readFileSync(template.html,'utf8');

容易的。

9

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

在此处输入图像描述

2
  • 这不会增加额外的空格吗? 评论 2015年12月6日12:29
  • 1
    @汤姆拜勒是的,观察很好。它只适用于您不关心空白的字符串,例如HTML。 评论 2015年12月6日23:02
8

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

例子:

let name='Willem';让年龄=26;let multilineString=`我的名字是:${name}我的年龄是:${age}`;console.log(multilineString);

兼容性:

  • 它是在欧洲标准6//预计2015年
  • 现在所有主要浏览器供应商(除了internet explorer)都支持它

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

2
  • 这现在与所有最新的浏览器兼容吗?还是有一些浏览器仍然不支持这种语法? 评论 2018年9月28日3:37
  • 很抱歉我的评论太晚了,编辑了答案并添加了兼容性信息;) 评论 2018年10月1日21:28
8

ES6的方法是使用模板文字:

const str=`此多行文字`;console.log(str);

更多参考在这里

1
  • 这个答案不仅小、不完整、格式不好,而且对前面的答案没有任何补充。标记并跳转删除。 评论 2019年1月18日17:43
7

你可以使用类型脚本(JavaScript SuperSet),它支持多行字符串,并在无开销的情况下将文件转换回纯JavaScript:

var模板={myString:`这是多行字符串`}警报(templates.myString);

如果您想用普通JavaScript实现同样的功能:

var模板={myString:function(){/*这是一些令人敬畏的多层使用注释的字符串函数内部作为字符串返回。享受jimmy操纵的代码。*/}.toString().slice(14,-3)}警报(templates.myString)

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

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

接口外部模板{myString:字符串;}声明var模板:externTemplates;警报(templates.myString)

您可以使用纯JavaScript变体中的多行字符串对象,将模板放入另一个文件中(可以将其合并到bundle中)。

您可以在以下位置尝试TypeScript
http://www.typescriptlang.org/Playground网站

2
6

ES6允许您使用一个反勾号在多行上指定一个字符串。它被称为模板文字。这样地:

var multilineString=`一行文本第二行文本第三行文字文本的第四行`;

使用反勾在NodeJS中有效,Chrome、Firefox、Edge、Safari和Opera都支持反勾。

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

5

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

例如:

//合并多个空白并修剪输出const t=(strings)=>{return strings.map(s)=>s.replace(/\s+/g,'')).join(“”).trim()}控制台.log(t`这个A类多行字符串`);//输出:“这是一个多行字符串”//类似但保留空白:const tW=(strings)=>{return strings.map(s)=>s.replace(/\s+/g,'\n')).join(“”).trim()}控制台.log(tW`这个A类多行字符串`);//输出:“这是多行字符串”
4

还要注意,当在每行末尾使用前向反斜杠将字符串扩展到多行时,前向反斜杠后面的任何额外字符(主要是空格、制表符和错误添加的注释)都会导致意外的字符错误,我花了一个小时才发现

var string=“line1\//注释、空格或制表符在此处引发错误第2行“;
4

出于对互联网使用字符串连接的热爱,请选择不使用ES6解决方案。ES6并不完全受支持,就像CSS3和某些浏览器适应CSS3移动的速度较慢一样。使用普通的ol'JavaScript,您的最终用户会感谢您。

例子:

var str=“这个世界既不是平的也不是圆的。”+“一旦失去就会找到”;

  • 虽然我同意你的观点,但我不会称javascript为“好”ol 评论 2018年3月5日0:18
  • 1
    2022年,这一警告如何站得住脚? 评论 2022年3月15日5:12
  • 最终用户有责任保持其浏览器更新。开发人员有责任以正确的方式进行编码,使产品更好。 评论 2022年12月7日11:10
4

带变量的多行字符串

var x=1string=string+`<label class=“container”><p>${x}</p></label>`;

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.