【发布时间】:2016-01-12 04:46:01
【问题描述】:
我在读一本书,然后我读到了这一行:- “HTML 解析器不知道您的 JavaScript 代码;它像对待任何其他文本一样对待它”。所以如果我们写:
<script type="text/javascript">
alert("first");
var string = "</script>";
</script>
我们收到一个错误,因为"</script>" 作为 HTML 解析器的结束标记,第二行 </script> 作为脚本的关闭,然后执行该脚本标记,并给出:-
Uncaught SyntaxError: Unexpected token ILLEGAL
即使第一个alert() 没有被执行?我不知道为什么?但我的主要问题是,如果"</script>" 被视为标签,那么当我们写这样的东西时:
var str = "<h1> hello world </h1>";
那么这不会在屏幕上呈现任何“hello world”吗?根据前面的示例,HTML 解析器也应该将该字符串视为 HTML 标记,但事实并非如此?谁能给我解释一下?抱歉英语不好:(
【问题讨论】:
-
因为它在脚本标签内,并且根据定义脚本标签被视为“显示:无”。
-
@Tiger:不止于此。脚本标签的内部内容被视为 CDATA - 也就是说,它们是文字文本字符串。但是在您的第一个示例中,脚本标记以第一个
</script>结尾,因此脚本以未关闭的"结尾,这是一个编译错误。 -
解析工作如下:如果你看到
<script>标签,逐字节扫描文本直到结束</script>标签。然后获取该文本并将其传递给 javascript 解释器。由于 DOM 解析器只知道标签而不是 javascript 语法,因此标签在字符串声明内关闭。 -
simplay 将
var string = "</script>";替换为var string = "</sc" + "ript>";
标签: javascript html