type="text/ecmascript" 与 type="text/javascript"

问题描述 投票:0回答:2

我正在读一本关于学习JavaScript的书,里面有这样几段:

...1997 年中,微软和 Netscape 联手 欧洲计算机制造商协会,

发布了第一个 名为

ECMAScript
或正式形式的标准版本
ECMA-262
...

正如我在本书和类似内容中发现的那样,JavaScript 和 ECMAScript 是相同的,只是名称不同。

另一方面,在 Dreamweaver、bracket 和其他一些编辑器中,有一些像这样的自动完成建议:

enter image description here

当我想向我的页面添加脚本标签时。

我想知道

ECMAScript
Javascript
之间是否有区别以及何时应该使用
text/javascript
text/ecmascript

javascript ecmascript-5
2个回答
25
投票

TL;DR 省略

type
属性或使用
type="module"
。服务器应使用内容类型
text/javascript

ECMAScript 是 ECMA International 标准化的语言规范,称为 ECMA-262ISO/IEC 16262。 JavaScript 是实现该规范的编程语言。 ECMAScript 存在多个版本

除了 ECMAScript 之外,常见的 JavaScript 实现通常会添加更多功能,这些功能可能由其他机构(如 W3C)标准化,或者可能是特定实现的专有(也称为“浏览器特定”)功能。所以你可以说,ECMAScript 代表了 JavaScript 的一个子集。

JavaScript 代码的 MIME 类型在 RFC 4329 文档中定义,其中指出

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 标准:较旧版本 表示空

type
属性的默认值为
application/javascript
,但较新版本 没有不再提及任何特定的 MIME 类型。相反,
type
属性现在似乎用于定义何时以及如何解释脚本:

省略该属性,将其设置为空字符串,或将其设置为JavaScript MIME类型本质匹配,意味着该脚本是经典脚本,将根据JavaScript Script顶级产生来解释。

将属性设置为“module”的 ASCII 不区分大小写的匹配意味着该脚本是 JavaScript 模块脚本,将根据 JavaScript 模块顶级生成进行解释。

仍然只允许与 JavaScript 无关的 MIME 类型:

将该属性设置为任何其他值意味着该脚本是一个数据块[...]作者必须使用与 JavaScript MIME 类型本质匹配的有效 MIME 类型字符串来表示数据块。

有趣的是,新版本的 HTML5 标准提到服务器应该发送具有内容类型的 JavaScript 代码

text/javascript
:

根据 ECMAScript 媒体类型更新,服务器应使用 text/javascript 作为 JavaScript 资源。服务器不应将其他 JavaScript MIME 类型用于 JavaScript 资源,并且不得使用非 JavaScript MIME 类型。

一般来说,对于经典脚本,我会省略

type
属性或使用
type="text/javascript"
(如果您必须支持旧版浏览器)。 JavaScript 模块需要
type="module"
,因此 MIME 类型的问题在那里不适用。


2
投票

当前版本的 HTML 标准最后更新时间为 2019 年 7 月 16 日)表示,如果省略,使用

type
标签的
<script>
属性指定的语言类型将回退到
text/javascript

该规范还指定

服务器应该使用 text/javascript 作为 JavaScript 资源。服务器不应将其他 JavaScript MIME 类型 用于 JavaScript 资源,并且不得使用非 JavaScript MIME 类型

© www.soinside.com 2019 - 2024. All rights reserved.