为啥 /*@ 不是 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 IE 检测,为啥不使用简单的条件注释? [复制]
为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]