33

I was reading a book about learning JavaScript, and there was these paragraphs:

...in middle of 1997, Microsoft and Netscape, with associate of European Computer Manufactures Association,

released the first version of a standard that named ECMAScript or with official form ECMA-262...

As much as I was found in this book and something like this, JavaScript and ECMAScript are the same and are different just in name.

From other hand, in Dreamweaver, bracket, and some other editors, there's some autocomplete suggestion like this:

enter image description here

when I want to add a script tag to my page.

I want to know if there are differences between ECMAScript and Javascript and when should I use text/javascript or text/ecmascript?

8
  • 12
    you don't need either anymore... Commented Apr 29, 2014 at 17:03
  • 2
    Javascript is what everyone else calls it, EMCAscript is the official ISO-backed specification, because the JS standard is under the stewardship of ECMA. Commented Apr 29, 2014 at 17:03
  • 9
    Voting to reopen, as the questions linked as duplicates of this one don't specifically address when to use the text/ecmascript MIME type. Commented Apr 29, 2014 at 17:41
  • 3
    I checked links in top of the question and as the @legosica said; there is no direct reference to the fact... how can I vote for reopen? Commented Apr 30, 2014 at 2:28
  • 3
    It would be much better if it was called ECMAscript to avoid confusion with Java Commented Sep 23, 2015 at 20:36

2 Answers 2

27

TL;DR Omit the type attribute or use type="module". Servers should use the content-type text/javascript.

ECMAScript is a language specification standardized by ECMA International as ECMA-262 and ISO/IEC 16262. JavaScript is a programming language that implements this specification. ECMAScript exists in several editions.

Besides ECMAScript common JavaScript implementations usually add more functionality, which might be standardized by other institutions (like the W3C) or might be proprietary (aka "browser-specific") features of the specific implementation. So you could say, that ECMAScript represents a subset of JavaScript.

The MIME types for JavaScript code are defined in the RFC 4329 document, which states that text/javascript and text/ecmascript are both obsolete and should be replaced by application/javascript and application/ecmascript:

Use of the "text" top-level type for this kind of content is known to be problematic. This document thus defines text/javascript and text/ ecmascript but marks them as "obsolete".

The RFC defines stricter processing rules for the application/ecmascript than for application/javascript, but this refers to the handling of MIME-type parameters and the character encoding and not to the interpretation of the code itself:

In the cited case, implementations of the types text/javascript, text/ecmascript, and application/javascript SHOULD and implementations of the type application/ecmascript MUST implement the requirements defined in this section: [...]

For the application/ecmascript media type, implementations MUST NOT process content labeled with a "version" parameter as if no such parameter had been specified; [...]

The following error processing behavior is RECOMMENDED for the media types text/javascript, text/ecmascript, and application/javascript, and REQUIRED for the media type application/ecmascript.

However, apart from the RFCs, there is also the HTML5-Standard by the W3C: Older versions of it say, that the default value for an empty type attribute is application/javascript, but newer versions don't mention any specific MIME-type anymore. Instead the type attribute now seems to be used to define when and how a script is interpreted:

Omitting the attribute, setting it to the empty string, or setting it to a JavaScript MIME type essence match, means that the script is a classic script, to be interpreted according to the JavaScript Script top-level production.

Setting the attribute to an ASCII case-insensitive match for "module" means that the script is a JavaScript module script, to be interpreted according to the JavaScript Module top-level production.

Only MIME types, which are not related to JavaScript, are still allowed:

Setting the attribute to any other value means that the script is a data block [...] Authors must use a valid MIME type string that is not a JavaScript MIME type essence match to denote data blocks.

Interestingly, newer versions of the HTML5 standard mention that servers should send JavaScript code with the content-type text/javascript:

Servers should use text/javascript for JavaScript resources, in accordance with Updates to ECMAScript Media Types. Servers should not use other JavaScript MIME types for JavaScript resources, and must not use non-JavaScript MIME types.

In general I would omit the type attribute or use type="text/javascript" (if you have to support older browsers) for classic scripts. JavaScript modules require type="module", so the MIME-type question does not apply there.

Sign up to request clarification or add additional context in comments.

7 Comments

I've never seen this application/javascript or application/ecmascript in the intellisense while providing type attribute of script tag. I work on asp.net and asp.net mvc applications using Visual Studio.
@RBT Even though your code completion does not suggest these types, they are valid. However, with HTML5 you don't need the type-attribute at all.
ohh. Thanks for the info. I saw it here that type attribute has a default value text/javascript starting HTML5 so it has become optional. Nice. Less typing :). I hope some time down the line the default will become application/javascript in next version of HTML as per the RFC you've cited.
For web-applications, we should most likely stick to text/javascript, see developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/…
@Malvoz Thanks for the hint, I've updated my answer.
|
3

The current version of the HTML standard (last updated on the 16 July 2019) says that the language type specified with the type attribute of the <script> tag falls back to text/javascript if omitted.

Also, that specification specifies that:

Servers should use text/javascript for JavaScript resources. Servers should not use other JavaScript MIME types for JavaScript resources, and must not use non-JavaScript MIME types.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.