2

在一些旧代码中,我发现了一个 JavaScript 文件,其内容被 HTML 注释包围。

我了解在旧浏览器中这样做的原因,但不了解它如何以任何方式成为有效的 JavaScript。

表达式<!--undefinedChrome 和 IE 的控制台中。

这是由仍然在 ECMAScript 标准中定义并在现代浏览器中工作的解释器(http://javascript.about.com/library/blhtmcmt.htm)处理的特殊情况,还是这些符号的组合碰巧会导致某些事情那是undefined

我把它读作“小于非递减”之类的东西,这在没有操作数的情况下看起来很荒谬。其中任何一个本身都会返回语法错误。

我明白为什么“使用严格”之类的东西;是有效的,但什么也不做,但我不知道这段代码实际上做了什么。

我可能想多了,但想了解发生了什么

4

2 回答 2

9

这是浏览器和 JavaScript 引擎一直实现的非标准功能。如今,它不能从 Web 平台中删除,因为这会破坏向后兼容性。它在JavaScript / Web ECMAScript 规范中有详细说明:

<!--必须被视为 a 的开头SingleLineComment——相当于//.

var x = true;
<!-- x = false; // note: no syntax error
x; // true

-->在一行的开头,可选地以空格或 MultiLineComments 开头,必须被视为 a SingleLineComment— 等效于//.

var x = true;
--> x = false; // note: no syntax error
x; // true

var x = 1;
/*
multiline comment!
x = 2;
*/ --> x = 3;
x; // 1
于 2013-09-05T13:36:08.690 回答
4

<!--开始一个单行的 Javascript 注释,信不信由你。

这用于通过将所有脚本内容包装在 HTML 注释中来允许<script>块对无法识别<script>标签的浏览器(例如 Netscape 2)隐藏自己。

这不应再使用。

于 2013-06-14T00:13:59.183 回答