Javascript 为什么</脚本>&引用;在脚本中,标记被视为结束标记,但&书信电报;h1>;hlo</h1>&引用;不渲染任何东西?

Javascript 为什么</脚本>&引用;在脚本中,标记被视为结束标记,但&书信电报;h1>;hlo</h1>&引用;不渲染任何东西?,javascript,html,Javascript,Html,我在读一本书,然后我读了这句话:- “HTML解析器不知道您的JavaScript代码;它将其视为任何其他文本”。因此,如果我们写: <script type="text/javascript"> alert("first"); var string = "</script>"; </script> 即使是第一个警报()也没有执行?我不知道为什么?但我的主要问题是,如果将“视为标记,那么当我们编写这样的内容时: var str = "

我在读一本书,然后我读了这句话:- “HTML解析器不知道您的JavaScript代码;它将其视为任何其他文本”。因此,如果我们写:

<script type="text/javascript">
      alert("first");
      var string = "</script>";
</script>
即使是第一个
警报()
也没有执行?我不知道为什么?但我的主要问题是,如果将
视为标记,那么当我们编写这样的内容时:

var str = "<h1> hello world </h1>"; 
var str=“你好世界”;

那么这不会在屏幕上呈现任何“hello world”吗?根据前面的示例,HTML解析器也应该将该字符串视为HTML标记,但它没有?谁能给我解释一下吗?抱歉英语不好:(

你应该了解浏览器是如何工作的。HTML和Javascript是如何呈现的。这是一本很好的读物

下面的文字来自上面的链接

标记化算法

该算法的输出是一个HTML标记。该算法表示为一个状态机。每个状态消耗输入流的一个或多个字符,并根据这些字符更新下一个状态。决策受当前标记化状态和树构造状态的影响。这意味着相同的消耗字符根据当前状态,对于正确的下一个状态,我将产生不同的结果。算法太复杂,无法完全实现,因此让我们看一个简单的示例,它将帮助我们理解原理

基本示例-标记以下HTML:

<html>
    <body>
        Hello world
    </body>
</html>

你好,世界
初始状态是“数据状态”。当使用“”字符时,每个字符都会附加到新的令牌名称中。在本例中,创建的令牌是一个“html”令牌。 当到达“>”标记时,将发出当前标记,状态变回“数据状态”。“”标记将按相同的步骤处理。到目前为止,已发出“html”和“body”标记。我们现在回到“数据状态”。使用“Hello world”的“H”字符将导致创建和发出字符标记,这将一直持续到“”。然后将发出新的标记标记,我们将返回“数据状态”。“”输入将与前一种情况一样处理

这同样适用于
标签。这就是它的工作原理。

我想我得到了答案, 据

尽管样式和脚本元素使用CDATA作为其数据模型, 对于这些元素,用户代理必须以不同的方式处理CDATA。 标记和实体必须视为原始文本并传递给 按原样应用。字符序列的第一次出现“ 样式和脚本元素的文本使用CDATA作为其数据模型,并且该文本直接传递给应用程序(js中的javascript intrepreter和css中的布局引擎(?)和

字符序列“ 因此,当我写信时:

var string = "</script>";
var string=”“;
组合“
var string = "<\/script>";
var string=”“;

在这里,html解析器不理解javascript代码,因此转义序列不起作用,因为它位于脚本标记内,并且根据定义,脚本标记被视为“display:none”“@Tiger:不止这些。脚本标记的内部内容作为CDATA—也就是说,它们是文本字符串。但在第一个示例中,脚本标记在第一个
上结束,因此脚本以未关闭的
结束“
这是一个编译错误。解析过程如下:如果看到
标记,请逐字节扫描文本,直到结束
标记。然后将该文本传递给javascript解释器。由于DOM解析器只知道标记而不知道javascript语法,因此标记在字符串声明中关闭。simplay replace this
var string=”“
var string=“”可能重复感谢那个有用的链接,但这现在回答了我想的问题,根据你的回答,当浏览器读取它的状态时,它应该是更改的,并且应该重新排序该元素?但事实并非如此
var string = "<\/script>";
var str = "< /script>";