我非常了解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)string += '<strong></strong>';
和(#2)string += '<strong><\/strong>';
是完全等效的,因为\/
被转换为/
,所以有没有理由使用\/
表单吗?是正确的,还是我遗漏了一些东西?
更重要的是,为什么(#1)string += '<strong></strong>';
会按预期工作,但(#3)string += '<script></script>';
会失败?
然后为什么(#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>
可以正常工作,但是我真的很想知道发生了什么,而不仅仅是对代码进行任意更改以“使其工作”。任何意见/建议表示赞赏。谢谢