hlo "不呈现任何内容?-6ren"> hlo "不呈现任何内容?-我正在读一本书,然后我读到这行:-“HTML 解析器不知道您的 JavaScript 代码;它像对待任何其他文本一样对待它”。所以如果我们写: alert("first"); -6ren">
gpt4 book ai didi

javascript - 为什么脚本标记中的 "</script>"被视为结束标记,但 "

hlo

"不呈现任何内容?
转载 作者:搜寻专家 更新时间:2023-10-31 08:26:14 25 4
gpt4 key购买 nike

我正在读一本书,然后我读到这行:-“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 标记,但它没有?谁能给我解释一下?抱歉英语不好:(

最佳答案

您应该了解浏览器的工作原理。 HTML 和 Javascript 是如何呈现的。这是一本好书How browsers work

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

标记化算法

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

基本示例 - 标记以下 HTML:

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

初始状态是“数据状态”。当遇到“<”字符时,状态变为“标签打开状态”。使用“a-z”字符会导致创建“开始标记 token ”,状态更改为“标记名称状态”。我们一直保持这种状态,直到“>”字符被消耗掉。每个字符都附加到新 token 名称。在我们的例子中,创建的 token 是一个“html” token 。当到达“>”标签时,发出当前 token 并且状态变回“数据状态”。 “”标签将通过相同的步骤进行处理。到目前为止,发出了“html”和“body”标签。我们现在回到“数据状态”。消耗“Hello world”的“H”字符将导致创建和发出字符标记,这一直持续到到达“”的“<”为止。我们将为“Hello world”的每个字符发出一个字符 token 。我们现在回到“标签打开状态”。使用下一个输入“/”将导致创建“结束标记 token ”并移动到“标记名称状态”。我们再次保持这种状态,直到我们到达“>”。然后新的标记 token 将被发出,我们回到“数据状态”。 ""输入将像前面的情况一样处理。

这同样适用于 </script>标记太。这就是它的工作原理。

关于javascript - 为什么脚本标记中的 "&lt;/script&gt;"被视为结束标记,但 "<h1> hlo </h1>"不呈现任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com