gpt4 book ai didi

javascript - <!-- 是有效的 javascript 吗?

转载 作者:行者123 更新时间:2023-11-30 06:58:22 24 4
gpt4 key购买 nike

我最近不得不修复一个有时会出现在 Internet Explorer 中的错误。错误在于,有时,解析器会阻塞像

这样的代码
<script type="text/javascript">
<!-- // comments -->
/*...*/
</script>

我们通过更正评论来解决这个问题。我的问题是:“<!--”是有效的 javascript 代码吗?我试着用 Firebug 测试它,它只说“未定义”。 JSFiddle 没有烦恼。 IE 只会在某些时候卡住(重新加载有问题的页面会显示所涉及脚本的结果)。

虽然知道,由于历史原因,js 中的 HTML 注释可能有效,具体取决于其确切位置,而且月相确实有用,但我对诸如“var <!-- foo is valid js”之类的答案更感兴趣代码,但 <!-- 本身不是。原因如下:...”

我在firebug中做了一些分析:

var x = 2;
var y = 3;
var z = 0;
console.log(x);
console.log(y);

y<!--x;
console.log(x);
console.log(y);

z = y<! --x;
console.log(x);
console.log(y);
console.log(z);

结果如下:

2
3
2
3
1
3
false

第一次和第二次尝试之间的区别很有趣。

然后我尝试了

z = (y <!--x);
console.log(z);

哪个失败了

SyntaxError: missing ) in parenthetical

最佳答案

首先在Is <!-- valid JavaScript上回答你的问题:不,不是,您在问题中提供的任何形式都不是。这是因为根据您可以在此处找到的 JavaScript BNF 语法,它是无效的:http://tomcopeland.blogs.com/EcmaScript.html

如果您有兴趣,这就是您在脚本 block 中看到它的原因:它是 HTML 注释字符。您确实经常在这样的脚本标签中看到它:

<script>
<!--

.. JavaScript code...

// -->
</script>

原因是旧浏览器(“旧”是指“石器时代”,如 Netscape 1.0)甚至不支持 JavaScript,否则只会在屏幕上显示代码。通过这种方式,那些较旧的浏览器将 JavaScript 视为 HTML 注释并且不显示它。较新的浏览器忽略这一点,只运行 JavaScript。

这是它实际工作的方式(来自 http://www.w3.org/TR/html401/interact/scripts.html#h-18.3.2 ):JavaScript 引擎允许字符串 <!--出现在 SCRIPT 元素的开头,并忽略其他字符,直到行尾。 JavaScript 解释 //作为开始延伸到当前行末尾的注释。这是隐藏字符串 --> 所必需的来自 JavaScript 解析器。

因为现在所有的浏览器都支持 JavaScript(即使它被关闭)你不需要再这样做了。由于这些原因(来自 http://www.javascripttoolbox.com/bestpractices/#comments ),这样做实际上是不好的做法:

  • 在 XHTML 文档中,源代码实际上对所有浏览器都是隐藏的并且变得无用
  • --不允许在 HTML 注释中使用,因此脚本中的任何递减操作都是无效的

可以在此处找到更深入的解释以及所有优缺点:http://lachy.id.au/log/2005/05/script-comments

关于javascript - &lt;!-- 是有效的 javascript 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21242310/

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