随着node.js的兴起,JavaScript中的多行字符串变得越来越必要。
我已经知道你可以在每一行的末尾使用\n\
,这不是我想要的。
答案 0 :(得分:122)
从ES6(以及大于v4的Node版本)开始,Javascript中添加了一个新的“模板文字”内在类型(用反向标记“`”表示),它也可用于构造多行字符串,如:
`this is a
single string`
评估为:'this is a\nsingle string'
。
请注意,第一行末尾的换行符包含在结果字符串中。
添加了模板文字以允许程序员构造字符串,其中值或代码可以直接注入字符串文字,而不必使用util.format
或其他模板,如:
let num=10;
console.log(`the result of ${num} plus ${num} is ${num + num}.`);
将打印“10加10的结果为20”。到控制台。
旧版本的节点可以使用“行继续”字符,允许您编写多行字符串,例如:
'this is a \
single string'
评估为:'this is a single string'
。
请注意,第一行末尾的换行符在结果字符串中包含 not 。
答案 1 :(得分:39)
当你的意思是多线字符串时,你究竟在寻找什么。
您正在寻找类似的东西:
var str = "Some \
String \
Here";
哪个会打印为“Some String Here”?
如果是这样,请记住以上是有效的Javascript,但这不是:
var str = "Some \
String \
Here";
有什么区别? \
之后的空格。有趣的调试。
答案 2 :(得分:8)
查看node.js的mstring模块。
这是一个简单的小模块,可让您在JavaScript中使用多行字符串。
这样做:
var M = require('mstring')
var mystring = M(function(){/***
Ontario
Mining and
Forestry
Group
***/})
获取
mystring === "Ontario\nMining and\nForestry\nGroup"
这就是它。
如何运作
在Node.js中,您可以调用函数的.toString
方法,它将为您提供函数定义的源代码,包括任何注释。正则表达式会抓取评论的内容。是的,这是一个黑客攻击。受到Dominic Tarr的一次性评论的启发。
注意:该模块(截至2012/13/11)在结束***/
之前不允许空格,因此您需要自己破解它。
答案 3 :(得分:6)
除了人们在这里发布的内容之外,我听说连接可以比加入现代javascript vms快得多。含义:
var a =
[ "hey man, this is on a line",
"and this is on another",
"and this is on a third"
].join('\n');
会慢于:
var a = "hey man, this is on a line\n" +
"and this is on another\n" +
"and this is on a third";
在某些情况下。 http://jsperf.com/string-concat-versus-array-join/3
另外,我发现这是Coffeescript中更具吸引力的功能之一。是的,是的,我知道,仇恨会讨厌。
html = '''
<strong>
cup of coffeescript
</strong>
'''
它特别适合html片段。我不是说它有理由使用它,但我确实希望它会落在ecma土地上: - (。
约什
答案 4 :(得分:4)
看一下CoffeeScript:http://coffeescript.org
它支持多行字符串,插值,数组理解和许多其他好东西。
答案 5 :(得分:1)
如果你使用io.js,它支持ECMAScript 6中的多行字符串。
var a =
`this is
a multi-line
string`;
参见&#34;新字符串方法&#34;在http://davidwalsh.name/es6-io获取详细信息和&#34;模板字符串&#34;在http://kangax.github.io/compat-table/es6/跟踪兼容性。
答案 6 :(得分:1)
除了可接受的答案:
`this is a
single string`
计算结果为:“这是一个\ ns单个字符串”。
如果您想使用字符串插值但没有换行, 只需在普通字符串中添加反斜杠即可:
`this is a \
single string`
=>“这是一个字符串”。
但是请记住,手动空白是必需的:
`this is a\
single string`
=>'这是单个字符串'
答案 7 :(得分:0)
Vanilla Javascipt不支持多行字符串。语言预处理器最近变得可行。
CoffeeScript,其中最受欢迎的就是这个功能,但它不是最小的,它是一种新语言。谷歌的traceur编译器为语言添加了新的功能作为超集,但我不认为多行字符串是增加的功能之一。
我正在寻找支持多行字符串和其他一些功能的javascript的最小超集。在为coffeescript编写初始编译器之前,我开始使用这种小语言。我打算今年夏天完成它。
如果预编译器不是一个选项,那么还有一个脚本标签hack,你将多行数据存储在html的脚本标签中,但是给它一个自定义类型,这样它就不会被篡改。然后使用javascript,您可以提取脚本标记的内容。
此外,如果您在源代码中的任何行的末尾放置\,它将导致新行被忽略,就好像它不存在一样。如果你想要换行符,那么你必须用“\ n \”结束该行。