gpt4 book ai didi

javascript - 为什么 <!-- 不会抛出语法错误?

转载 作者:数据小太阳 更新时间:2023-10-29 03:53:35 26 4
gpt4 key购买 nike

我在一些遗留代码中注意到以下模式:

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

经过一些研究,这似乎是一种非常的老技术,用于在浏览器不支持 <script> 时从 DOM 中隐藏脚本元素的内容。元素。可以找到更多信息here .

我担心的是:为什么 <!--不会抛出语法错误? 我在 whatwg.org's website 上找到了那<!--在功能上应该等同于 // , 它链接到 ECMAScript grammar about comments 中的一个片段.问题是,<!--根本不是由该语法定义的。

因此,这似乎是所有主流浏览器恰好实现的未定义行为。是否有允许这样做的规范,或者这是人们提出的向后兼容性黑客攻击?

最佳答案

官方:因为有 specific handling for it在 HTML 规范中。例如,这是一个“按事实”的事情。这不是 JavaScript 的东西,您不会在 JavaScript 语法中找到它。

非正式地,似乎至少有一些 JavaScript 引擎在本质上处理它,有时以一种使我认为有效的 JavaScript 无效的方式。例如,在浏览器的 V8 上,这会失败:

eval("var a = 1; var n = 3; console.log(a<!--n);")

...与Unexpected end of input .我很确定它不应该,但我不是解析律师。我希望它记录 false到控制台,就像这样:

eval("var a = 1; var n = 3; console.log(a<! --n);")
// Note the space -------------------------^

旁注:Meteor 的 jsparser同意我的观点,将双引号内的部分复制并粘贴到其中。

注意字符<!不出现在 the specification 中,那里似乎没有出现任何 70 次“评论”一词,也没有出现在 comment grammar 中的任何地方。 ,因此它似乎不是明确的符合规范的异常。这只是一些 JavaScript 引擎为了避免被人做傻事搞砸而做的事情。没什么大惊喜。 :-)

关于javascript - 为什么 &lt;!-- 不会抛出语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392218/

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