为啥 /*@ 不是 JavaScript 中的注释?

Posted

技术标签:

【中文标题】为啥 /*@ 不是 JavaScript 中的注释?【英文标题】:Why /*@ isn't a comment in JavaScript?为什么 /*@ 不是 JavaScript 中的注释? 【发布时间】:2011-08-01 13:16:04 【问题描述】:

这个脚本http://html5shiv.googlecode.com/svn/trunk/html5.js 看起来像一个大注释,但它确实有效。为什么 /*@ 的行为不像评论?

【问题讨论】:

更多关于 SO 相关的here 【参考方案1】:

这里还有一些info 和source。

这是一个注释 - 多行注释。所有浏览器都支持 javascript 中的 cmets( // 或 /* ... */ )。但只有 IE 会检查注释中的 @ 并识别脚本的一部分以进行条件编译。这是为了使用非标准的 Microsoft 功能。

HTML中还有条件cmetsMSDN,在IE10中会去掉。

【讨论】:

【参考方案2】:

这是使用 IE 不考虑 /*@ 评论的奇怪方式的 hack。

【讨论】:

【参考方案3】:

这使用了一个名为 conditional compilation 的专有 Microsoft 功能。就非 Microsoft 浏览器而言,它是一个注释(但它们不需要 shiv)。

【讨论】:

但是如果这个/*@只适用于IE,为什么这个脚本包含在html中还有另一个条件:<!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->。需要这种仔细检查的目的是什么? 我只能猜测作者的动机,但条件 cmets 会阻止其他浏览器尝试下载它,而条件编译会阻止它执行,如果您将其汇总到标准的单个缩小 JS 包中。跨度>

以上是关于为啥 /*@ 不是 JavaScript 中的注释?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Javascript 会忽略单行 HTML 注释?

为啥函数的参数对象不是 Javascript 中的数组?

Javascript IE 检测,为啥不使用简单的条件注释? [复制]

为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]

删除 PHP 中的所有 REAL Javascript 注释

为啥正文中的 javascript 函数优先于头部中的函数?