有人可以向我阐明JavaScript字符串串联的奥秘吗?

时间:2019-09-25 07:34:59

标签: javascript string concatenation string-concatenation

我非常了解javascript,但是遇到了与字符串连接有关的问题,这让我很困惑。我组成了四个公认的人为显示问题的示例。这四个示例中唯一的区别是string +=开头的行(字符串串联行)。

示例1:

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript String Concatenation #1</h2>

<p id="demo"></p>

<script>
var string = "John Doe";
string += '<strong></strong>';
document.getElementById ("demo").innerHTML = string;
</script>

</body>
</html>

示例2:

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript String Concatenation #2</h2>

<p id="demo"></p>

<script>
var string = "John Doe";
string += '<strong><\/strong>';
document.getElementById ("demo").innerHTML = string;
</script>

</body>
</html>

示例3:

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript String Concatenation #3</h2>

<p id="demo"></p>

<script>
var string = "John Doe";
string += '<script></script>';
document.getElementById ("demo").innerHTML = string;
</script>

</body>
</html>

示例4:

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript String Concatenation #4</h2>

<p id="demo"></p>

<script>
var string = "John Doe";
string += '<script><\/script>';
document.getElementById ("demo").innerHTML = string;
</script>

</body>
</html>

我环顾四周,找不到任何地方解决此问题。有人可以消除我的困惑吗?具体来说:

  1. 我假设(#1)string += '<strong></strong>';和(#2)string += '<strong><\/strong>';是完全等效的,因为\/被转换为/,所以有没有理由使用\/表单吗?是正确的,还是我遗漏了一些东西?

  2. 更重要的是,为什么(#1)string += '<strong></strong>';会按预期工作,但(#3)string += '<script></script>';会失败?

  3. 然后为什么(#4)string += '<script><\/script>;会按预期工作(没有错误)?

在撰写本文时,通过观察将#3加载到浏览器中的结果,我的最佳猜测是javascript正在过早终止#3中的脚本,因为它无法找出</script>在一个字符串里面。但是我想它会知道字符串内的</script>并不是脚本的结尾。

这不仅是一项学术活动。在生产代码中,我正在生产一个带有<script src="something"></script>标签的弹出窗口。我使用javascript写功能将串联字符串写出到文件中。它可以与<\/script>语法完美配合,但不能与</script>语法兼容。在Chrome或IE中使用F12的错误消息是使用</script>语法的行上的“ Unterminated string constant”。上面的示例#3生成镶边错误消息:“无效或意外令牌”。

<\/script>可以正常工作,但是我真的很想知道发生了什么,而不仅仅是对代码进行任意更改以“使其工作”。任何意见/建议表示赞赏。谢谢

0 个答案:

没有答案