如何在JavaScript的多行代码中中断字符串?


198

JavaScript中是否有一个字符可以破坏一行代码,以便即使换行也可以将其读取为连续的?

就像是....

1.警报(“请选择文件   
2. \删除“);

Answers:


272

在您的示例中,您可以将字符串分成两部分:

alert ( "Please Select file"
 + " to delete");

或者,当是字符串(如您的情况)时,您可以按照@Gumbo的建议使用反斜杠

alert ( "Please Select file\
 to delete");

请注意,这种反斜杠方法不一定是首选方法,并且可能不受普遍支持(我很难找到关于此的硬数据)。这是不是ECMA 5.1规范

当使用其他代码(不在引号中)时,换行符将被忽略,并且完全可以接受。例如:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}

您可以分解if语句吗?
TTT

17
但是要提防自动分号插入机制:在函数末尾尝试在一行上返回return并在下一行上插入“字符串”,结果是未定义。
一些

这符合标准吗?所有兼容的浏览器都将支持吗?不要旧的浏览器都支持它?这些重要问题均未涵盖-1。
ulidtko

3
好吧...如果您要提出一堆尚未被问到的新问题,则必须给我们一个回答这些问题的机会。我用一个不满意的猜想来更新答案。
Michael Haren 2013年

2
当心反斜杠。它将吃掉所有的空白,直到找到空白为止。因此该示例将“警告”:请选择要删除的文件。如果要在文件和之间保留空白,则应在反斜杠前放置空格。
jgomo3 2015年

41

将反斜杠放在行尾:

alert("Please Select file\
 to delete");

编辑     我必须注意,这不是ECMAScript字符串的一部分,因为根本不允许使用行终止符

LineTerminator ”字符不能出现在字符串文字中,即使前面加上反斜杠也是如此\。使行终止符成为字符串文字的字符串值一部分的正确方法是使用转义序列,例如\n\u000A

因此,使用字符串串联是更好的选择。


    2015年1月5日更新ECMAScript5中的字符串文字允许使用上述语法:

行终止符不能出现在字符串文字中,除非作为LineContinuation的一部分来产生空字符序列。使行终止符成为字符串文字的String值的一部分的正确方法是使用转义序列,例如\n\u000A


1
ECMAScript5允许:“ 行终止符不能出现在字符串文字中,除非作为 LineContinuation的一部分来产生空字符序列。使行终止符成为字符串文字的String值一部分的正确方法是使用转义序列,例如\nor \u000A
Oriol

1
@Oriol感谢您的来信,并相应地更新了答案!
浓汤

1
如果文件是在Windows中创建的,这是否有问题?换句话说,以\r\n而不是\n?结尾的行
亚当·普洛彻

31

ECMAScript 6引入了模板字符串

模板字符串是允许嵌入表达式的字符串文字。您可以使用多行字符串和字符串插值功能。

例如,

alert(`Please Select file   
to delete`);

会提醒

Please Select file   
to delete

1
哇,酷极了。要在键盘上获取这些``,请按两次SHIFT +´。在德语键盘上,该键位于退格键附近。
纳杜

@Nadu取决于键盘。我的有一把`钥匙。由于它是修饰符,因此不能直接编写。这可能就是为什么您认为应该按两次,但这会写出两个。按空格键只写一个。
Oriol

令人难以置信的是,允许多行字符串花费很多时间而没有花哨的技巧……问题是:什么将用作行分隔符-文档的硬编码字符或换行字符?
StanE

1
如果您想放大* .js文件,`会有问题。
Raskolnikov



4

有趣的是。尝试过:

alert("Some \
    string \
    wrapped \
    across \
    mutliples lines.")

这行得通。但是,偶然!,最后一个反斜杠后面有一个空格字符(所有其他反斜杠都位于行的末尾)。这会导致JavaScript错误!但是,删除此空间可修复错误。

这在使用Cordova的Android ADT中。


1
我一整天都花在解决这个问题上,而且感谢您,我还发现在任何斜杠后面加一个空格都会导致我的离子应用无法编译。谢谢!
rekordboy

1
不敢相信任何人评论说这将在代码中包含缩进作为字符串的一部分,因此该示例变为Some\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH


0

您可以将长字符串常量分解为逻辑块,然后将它们分配给数组。然后join使用一个空字符串作为定界符。

var stringArray = [
  '1. This is first part....',
  '2. This is second part.....',
  '3. Finishing here.'
];

var bigLongString = stringArray.join('');
console.log(bigLongString);

输出将是:

  1. 这是第一部分.... 2。这是第二部分。....3。在这里结束。

这种方法对性能的影响很小,但是您获得了代码的可读性和可维护性。



-3

我尝试了许多上述建议,但在Chrome代码检查器中收到了非法字符警告。以下对我有用(不过仅在Chrome中测试!)

alert('stuff on line 1\\nstuff on line 2);

出来像...

stuff on line 1
stuff on line 2

注意双反斜杠!! ...这似乎很重要!


-5

无需任何手动中断代码。只需在要中断的位置添加\ n即可。

alert ("Please Select file \n to delete");

这将显示警报

Please select file 
to delete.

不赞成投票的人,你能告诉我不赞成投票的原因吗?此解决方案始终对我有效。
Narendra 2013年

27
我不知道谁投票赞成或为什么投票;但这只是一个猜测:操作人员想知道如何在多行代码中扩展文本文字,而不是如何在输出中插入换行符。
Zarepheth 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.