注释掉<脚本>结束标记.语法确定与否

Commenting out <script> closing tag. Syntax OK or not?

本文关键字:语法 结束 脚本 注释      更新时间:2023-09-26

在处理客户提供代码的项目时,我偶尔会看到这种情况:

<script src="xx" type="xx">//</script>

我一直想知道这是否是一种正确的语法。
它至少不会打扰任何浏览器。但是它非常严重地搞砸了我的编辑器的语法突出显示器,因为它在注释掉时无法识别结束标签。

另一种口味是:

<script>
  //some code
//</script>

我只知道这个可以防止代码泄漏到页面中:

<script>
 //<!--
 //some code
 //-->
</script>

而且我绝对不知道其他人想要阻止什么。

编写 <script src="xx" type="xx">//</script> 是形式上正确的语法,因为 HTML 文档被解析,//被视为数据,然后这些数据被丢弃,因为元素具有 src 属性。当然,它也符合JavaScript语法,构成一个空程序,带有空注释。

但是,//没有任何用处。非空评论是否有用是值得商榷的;HTML5 草案建议它可以,请参阅那里的外部脚本的内联文档。

使用//</script>在形式上是正确的,但毫无用处。

一个搞砸了的语法高亮笔有一个错误(它没有被编程为正确解析script元素)。

像你提到的"防止代码泄漏到页面中"的构造,在脚本代码中具有<!---->,比无用的代码更糟糕。它们是无用的,因为没有人再使用Netscape 1了。它们比无用更糟糕,因为人们在尝试使用它们时会犯打字错误(并且因为根据 XHTML 规则,类似注释的结构是一个注释,可能会被浏览器删除)。此外,您提到的特定结构甚至不会在 Netscape 1 上起作用;它将使字符"//"出现在页面内容中。

这仍然是一个有效的 javascript 行。这是一个空白的评论。

//</script>

因此,浏览器不会遇到任何问题。如果您的语法突出显示器无法识别它,则这是语法突出显示器的错误。

是的,我同意如果代码最后没有空白注释,阅读起来会容易得多。

没关系,因为双斜杠注释了 JavaScript 代码。由于脚本是 HTML 标记,因此不会有任何影响。

猜测,我怀疑<script ...>//</script>最初是在从 XML 生成 HTML 页面时完成的,其中//提供了一些空但具体的内容来阻止 XML 序列化程序将脚本标签折叠成自闭合标签<script ... />这是正常的 XML 但糟糕的 HTML。

从那以后,它很可能被货物崇拜复制了很多次。