多行字符串的无效或意外标记
Invalid or unexpected token with multiline string
我试图从我的 JavaScript 代码中的函数中 return 一个 HTML 字符串,但在控制台上我收到错误 "Uncaught syntax error: invalid or unexpected token"以下代码
function formatPrize (prize) {
return (
/*Unexpected token here*/ '<div class = "wrapper">
<div class = "card radius shadowDepth1">
<div class ="card__image border-tlr-radius">
<img src = "admin/"'+prize.sponsorLogo+'"> alt = "image" class = "border-tlr-radius">
</div>
<div class = "card_content card_padding">
<div class = "card_meta">
<h3>"'+prize.name+'"</h3>
</div>
<article class = "card__article">
Test message
</article>
</div>
</div>
</div>'
);
}
我基本上替换了之前在这里的其他一些代码并且有效:
"<tr>" +
"<td>" + prize.name + "</td>" +
"<td>$" + prize.value + "</td>" +
"<td>" + prize.description + "</td>" +
"</tr>"
是不是我替换的时候做错了什么?我该如何解决?
问题是单引号和双引号无法在JavaScript中创建多行字符串。
作为替代方案,可以将每一行设为单独的字符串并将它们连接起来,或者执行以下操作:
要使用多行字符串,您需要将 JavaScript 中的单引号 ('
) 替换为反引号 (`
) — 这可能会导致错误。
正如@noazark 所指出的,这可能具有有限的兼容性,因为它带有 ES6,ES6 仍然相对较新。
您也可以在每行末尾使用反斜杠转义换行符。
有关前两种方法的详细信息,请参阅 this SO answer。
遗憾的是,大多数浏览器不支持 javascript 中的多行字符串。不过你可以这样做:
[
"<tr>",
"<td>" + prize.name + "</td>",
"<td>$" + prize.value + "</td>",
"<td>" + prize.description + "</td>",
"</tr>"
].join('')
编辑
您提供的原始版本有效,因为 +
运算符查找下一个字符串,并且由于 JavaScript 不区分空格,您可以将它放在下一行而不会出现任何问题。所以具体来说,您的更改是用多行字符串(不受支持)替换加号(字符串连接)。
您必须转义换行符(使用 \
)或连接多行(均如下所示)。
function formatPrize (prize) {
return '<div class = "wrapper"> \
<div class = "card radius shadowDepth1"> \
<div class ="card__image border-tlr-radius"> \
<img src = "admin/"'+prize.sponsorLogo+'"> alt = "image" class = "border-tlr-radius"> \
</div>' +
'<div class = "card_content card_padding">\n' +
'<div class = "card_meta">\n' +
'<h3>"'+prize.name+'"</h3>\n' +
'</div>\n' +
' \n' +
'<article class = "card__article"> \
Test message \
</article> \
</div> \
</div> \
</div>';
}
我试图从我的 JavaScript 代码中的函数中 return 一个 HTML 字符串,但在控制台上我收到错误 "Uncaught syntax error: invalid or unexpected token"以下代码
function formatPrize (prize) {
return (
/*Unexpected token here*/ '<div class = "wrapper">
<div class = "card radius shadowDepth1">
<div class ="card__image border-tlr-radius">
<img src = "admin/"'+prize.sponsorLogo+'"> alt = "image" class = "border-tlr-radius">
</div>
<div class = "card_content card_padding">
<div class = "card_meta">
<h3>"'+prize.name+'"</h3>
</div>
<article class = "card__article">
Test message
</article>
</div>
</div>
</div>'
);
}
我基本上替换了之前在这里的其他一些代码并且有效:
"<tr>" +
"<td>" + prize.name + "</td>" +
"<td>$" + prize.value + "</td>" +
"<td>" + prize.description + "</td>" +
"</tr>"
是不是我替换的时候做错了什么?我该如何解决?
问题是单引号和双引号无法在JavaScript中创建多行字符串。
作为替代方案,可以将每一行设为单独的字符串并将它们连接起来,或者执行以下操作:
要使用多行字符串,您需要将 JavaScript 中的单引号 ('
) 替换为反引号 (`
) — 这可能会导致错误。
正如@noazark 所指出的,这可能具有有限的兼容性,因为它带有 ES6,ES6 仍然相对较新。
您也可以在每行末尾使用反斜杠转义换行符。
有关前两种方法的详细信息,请参阅 this SO answer。
遗憾的是,大多数浏览器不支持 javascript 中的多行字符串。不过你可以这样做:
[
"<tr>",
"<td>" + prize.name + "</td>",
"<td>$" + prize.value + "</td>",
"<td>" + prize.description + "</td>",
"</tr>"
].join('')
编辑
您提供的原始版本有效,因为 +
运算符查找下一个字符串,并且由于 JavaScript 不区分空格,您可以将它放在下一行而不会出现任何问题。所以具体来说,您的更改是用多行字符串(不受支持)替换加号(字符串连接)。
您必须转义换行符(使用 \
)或连接多行(均如下所示)。
function formatPrize (prize) {
return '<div class = "wrapper"> \
<div class = "card radius shadowDepth1"> \
<div class ="card__image border-tlr-radius"> \
<img src = "admin/"'+prize.sponsorLogo+'"> alt = "image" class = "border-tlr-radius"> \
</div>' +
'<div class = "card_content card_padding">\n' +
'<div class = "card_meta">\n' +
'<h3>"'+prize.name+'"</h3>\n' +
'</div>\n' +
' \n' +
'<article class = "card__article"> \
Test message \
</article> \
</div> \
</div> \
</div>';
}