TL;DR 如果您不关心旧浏览器,只需省略 type 标签即可。
ECMAScript 是由 ECMA International 标准化为 ECMA-262 和 ISO/IEC 16262 的语言规范。 JavaScript 是一种实现该规范的编程语言。 ECMAScript 存在多个版本。最新版本是第 6 版(2016 年),但到目前为止,大多数 JavaScript 实现仅符合第 5 版。
除了 ECMAScript 之外,常见的 JavaScript 实现通常会添加更多功能,这些功能可能由其他机构(如 W3C)标准化,或者可能是特定实现的专有(也称为“特定于浏览器”)功能。所以你可以说,ECMAScript 代表 JavaScript 的一个子集。
但是,RFC 4329 文档中定义了 JavaScript 代码的 MIME 类型,其中指出 text/javascript 和 text/ecmascript 都已过时,应替换为 application/javascript 和 application/ecmascript:
已知对此类内容使用“文本”顶级类型
有问题。本文档因此定义了 text/javascript 和 text/
ecmascript 但将它们标记为“已过时”。
RFC 为application/ecmascript 定义了比application/javascript 更严格的处理规则,但这是指对 MIME 类型参数和字符编码的处理,而不是对代码本身的解释:
在引用的情况下,text/javascript、text/ecmascript 和 application/javascript 类型的实现应该和 application/ecmascript 类型的实现必须实现本节中定义的要求:[...]
对于 application/ecmascript 媒体类型,实现不得处理标有“version”参数的内容,就好像没有指定这样的参数一样; [...]
对于媒体类型 text/javascript、text/ecmascript 和 application/javascript,建议使用以下错误处理行为,对于媒体类型 application/ecmascript,建议使用以下错误处理行为。
除了 RFC,还有 W3C 的 HTML5 标准:Older versions 说,空的type 属性的默认值是application/javascript,但newer versions 没有提到不再有任何特定的 MIME 类型。相反,他们将任何没有类型或 MIME 类型的 script 标记定义为所谓的“经典脚本”:
省略属性,设置为空字符串,或者设置为JavaScript MIME类型本质匹配,表示该脚本为经典脚本,按照JavaScript Script顶层制作进行解释。经典脚本受 async 和 defer 属性影响,但仅在设置 src 属性时。作者应该省略 type 属性,而不是多余地设置它。
一般来说,如果您必须支持旧版浏览器,我会省略 type 属性(如 HTML5 标准所推荐的那样)或使用 type="text/javascript"。 HTTP-Server 应该以application/javascript 的形式提供 JavaScript 代码。