未结束的字符串字面量

26

以下代码:

var str= "<strong>English Comprehension<\/strong>
                    <br\/>
                    <ul>
                    <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>
                    <li>  Complete the Sentence (Grammar)<\/li>
                    <li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>
                    <li>  Sentence Ordering (Comprehension skills)<\/li>
                    <li>  Questions based on passage (Comprehension skills)<\/li>
                    <\/ul>
                    <br\/>";

出现错误:"unterminated string literal"。问题出在哪里?


4
你的代码中为什么要使用 \/?斜杠并不是特殊字符,不需要进行转义。 - Felix Kling
相关:https://dev59.com/6HI-5IYBdhLWcg3w0MDx - handle
9个回答

39

在 JavaScript 中,您不能像那样跨行拆分字符串。您可以通过将每行作为单独的字符串并使用加号进行串联来实现相同的可读性,如下所示:

var str = "<strong>English Comprehension</strong>"
    + "<br />"
    + "<ul>"
    + "<li>Synonyms/Antonyms/Word Meaning (Vocabulary)</li>"

and so on...


19

若要在JavaScript中使用多行字符串,每行末尾必须使用 '\':

var str = "abc\
def\
ghi\
jkl";

如果您的代码有缩进,请注意额外的空格。


11

我建议用不同的方式来做这件事...在HTML中使用隐藏元素,例如:

<div id="myHiddenDiv" style="display: none;"><strong>English Comprehension</strong>
<br />
...
</div>
然后只需读取其内部HTML内容:
var str = document.getElementById("myHiddenDiv").innerHTML;

最大的优点是你不必用字面字符串搏斗,这样编辑就更容易了。缺点是你要向DOM添加另一个元素。由你自己决定。 :)


最终我使用了你的方法,使用了jQuery。 - VIKASH
2
嗨,@VIKASH,如果你觉得回答可行的话,请点击左侧的“V”图标接受它。对于你的其他问题也一样 - 接受正确的答案是这个地方的运作方式。 :) - Shadow The Spring Wizard

6

在Javascript中,编写多行字符串不是最佳实践。

但是,你可以使用\终止符来实现:

var str= "<strong>English Comprehension<\/strong>\
                <br\/>\
                <ul>\
                <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
                <li>  Complete the Sentence (Grammar)<\/li>\
                <li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
                <li>  Sentence Ordering (Comprehension skills)<\/li>\
                <li>  Questions based on passage (Comprehension skills)<\/li>\
                <\/ul>\
                <br\/>";

请注意,尾随空格是字符串的一部分,因此最好摆脱它们,除非它们是有意为之:
var str= "<strong>English Comprehension<\/strong>\
<br\/>\
<ul>\
<li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
<li>  Complete the Sentence (Grammar)<\/li>\
<li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
<li>  Sentence Ordering (Comprehension skills)<\/li>\
<li>  Questions based on passage (Comprehension skills)<\/li>\
<\/ul>\
<br\/>";

3
在Javascript中连接字符串的好方法如下:
var stringBuilder = [];

stringBuilder.push("<strong>English Comprehension</strong>");
stringBuilder.push("<br />");
stringBuilder.push("<ul>");
...
var resultString = stringBuilder.join("");

这种方法比其他方法更快。
var str = "a"+"b" +"c"

有趣的技巧,尽管在原始代码中没有字符串连接。 - Shadow The Spring Wizard

2
JavaScript不允许在字符串中直接使用换行符,除非你使用\进行转义:
var str= "<strong>English Comprehension<\/strong>\
    <br\/>\
    <ul>\
    <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>\
    <li>  Complete the Sentence (Grammar)<\/li>\
    <li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>\
    <li>  Sentence Ordering (Comprehension skills)<\/li>\
    <li>  Questions based on passage (Comprehension skills)<\/li>\
    <\/ul>\
    <br\/>";

您可以考虑使用 ES2015+模板文字,它使用反引号而不是'",并允许字面行换行:
var str= `<strong>English Comprehension<\/strong>
    <br\/>
    <ul>
    <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>
    <li>  Complete the Sentence (Grammar)<\/li>
    <li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>
    <li>  Sentence Ordering (Comprehension skills)<\/li>
    <li>  Questions based on passage (Comprehension skills)<\/li>
    <\/ul>
    <br\/>`;

当然,这只适用于支持ES2015的JavaScript引擎(或者您进行了转译)。
请注意,在模板字面量中,${...}具有特殊含义(允许您替换任何表达式的结果)。
let v = "Ma";
console.log(`Look ${v}, no hands!`); // Look Ma, no hands!

1

去掉换行符,它就能正常工作。要记住的陷阱 ;) 看这里,简单地没有换行符也能正常工作: http://jsfiddle.net/87dYh/

var str= "<strong>English Comprehension<\/strong><br\/><ul>  <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)<\/li>                  <li>  Complete the Sentence (Grammar)<\/li>                   <li>  Spot error/Correct sentence (Grammar/sentence construction)<\/li>     <li>  Sentence Ordering (Comprehension skills)<\/li>                  <li>  Questions based on passage (Comprehension skills)<\/li>                 <\/ul>              <br\/>";

alert(str);

1
如果您想将数据保持在一个字符串块中,请尝试以下方法:
var str= "<strong>English Comprehension</strong>\n\
                <br />\n\
                <ul>\n\
                <li>  Synonyms/Antonyms/Word Meaning (Vocabulary)</li>\n\
                <li>  Complete the Sentence (Grammar)</li>\n\
                <li>  Spot error/Correct sentence (Grammar/sentence construction)</li>\n\
                <li>  Sentence Ordering (Comprehension skills)</li>\n\
                <li>  Questions based on passage (Comprehension skills)</li>\n\
                </ul>\n\
                <br />";

注意每行末尾的\n\

0
我的代码是一个response.write(),我需要插入HTML以在Iframe中的表单上进行POST提交。当我从文本编辑器复制代码时,回车符会带到代码窗口中。一旦我删除了回车和标签之间的空格,使代码看起来像一个块段落,问题就解决了。
("loremIPSUM.<br><br><h2>Title</h2><br>loremIPSUM:<br><br><br><a href='http://url1'>lnk1</a><br><br><a href='http://url2'>loremIPSUMlnk2</a><br><br><a href='http://url3'>loremIPSUM</a><br><br><a href='url4'>IF THE case id is: "</a>"+value)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接