为什么这一小段JavaScript会中断?

时间:2016-10-25 01:47:22

标签: javascript

为什么此代码会中断:



<script>
  var test = "<!-- <script ";
</script>
    
<h1>
  If you can see this it means the page didn't break
</h1>
&#13;
&#13;
&#13;

https://jsfiddle.net/y3w7ugaw/

这并不是

&#13;
&#13;
<script>
  var test = "<!-- <script";
</script>
    
<h1>
  If you can see this it means the page didn't break
</h1>
&#13;
&#13;
&#13;

https://jsfiddle.net/mL1xxygo/

我不应该因为test var是一个字符串

而中断

1 个答案:

答案 0 :(得分:2)

好问题。这两个例子的不同之处在于,第一个例子在<script和后面的两个双引号之间有一个空格而第二个没有。这两个示例都有字符序列<!--,用于在javascript字符串中的HTML源代码中引入comments

第一个示例没有显示标题,可以通过

重新显示标题
  • 删除<!--个字符,或
  • 删除字符串值中<script之后的空格。

评论中提到的问题是HTML虽然阅读HTML parsing spec并不能使原因特别明显,但HTML无效。

javascript 解决方案是为了解析使用反斜杠,混淆解析器的字符,即使该字符通常不需要转义。 JavaScript会在普通字符之前忽略反斜杠,而解析器则不会。

因此

    var test = "<\!-- <script ";

    var test = "<\!-- <script";

两者都成功创建了一个包含HTML开始注释序列的字符串,而不会混淆解析器。