我在 Ruby 中有以下代码。我想将此代码转换为 JavaScript。JS中的等价代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
我在 Ruby 中有以下代码。我想将此代码转换为 JavaScript。JS中的等价代码是什么?
text = <<"HERE"
This
Is
A
Multiline
String
HERE
正如第一个答案提到的,使用 ES6/Babel,您现在可以简单地使用反引号创建多行字符串:
const htmlString = `Say hello to
multi-line
strings!`;
插值变量是一个流行的新特性,它带有反引号分隔的字符串:
const htmlString = `${user.name} liked your post about strings`;
这只是转化为串联:
user.name + ' liked your post about strings'
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.';
每行开头的空格在编译时无法安全地去除;斜线后面的空格会导致棘手的错误;虽然大多数脚本引擎都支持这一点,但它不是 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.';
该模式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');
或者已经显示的模式匿名(转义换行符),这可能是您代码中的一个丑陋的块:
var myString =
'<div id="someId"> \
some content<br /> \
<a href="#someRef">someRefTxt</a> \
</div>';
这是另一个奇怪但有效的“技巧” 1:
var myString = (function () {/*
<div id="someId">
some content<br />
<a href="#someRef">someRefTxt</a>
</div>
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
外部编辑:jsfiddle
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.`;
1注意:这将在缩小/混淆您的代码后丢失
您可以在纯 JavaScript 中使用多行字符串。
此方法基于函数的序列化,定义为依赖于实现。它确实适用于大多数浏览器(见下文),但不能保证它在未来仍然有效,所以不要依赖它。
使用以下功能:
function hereDoc(f) {
return f.toString().
replace(/^[^\/]+\/\*!?/, '').
replace(/\*\/[^\/]+$/, '');
}
你可以在这里拥有这样的文件:
var tennysonQuote = hereDoc(function() {/*!
Theirs not to make reply,
Theirs not to reason why,
Theirs but to do and die
*/});
该方法已在以下浏览器中成功测试(未提及=未测试):
不过要小心你的压缩器。它倾向于删除评论。对于YUI 压缩器,以/*!
(如我使用的)开头的注释将被保留。
我认为真正的解决方案是使用CoffeeScript。
ES6 更新:您可以使用反引号代替创建带有注释的函数并在注释上运行 toString。正则表达式需要更新为仅去除空格。您还可以使用字符串原型方法来执行此操作:
let foo = `
bar loves cake
baz loves beer
beer loves people
`.removeIndentation()
有人应该写这个 .removeIndentation 字符串方法...;)
你可以这样做...
var string = 'This is\n' +
'a multiline\n' +
'string';