Type = "text/ecmascript" vs type = "text/javascript"

Я читал книгу об изучении JavaScript, и были следующие параграфы:

... в середине 1997 года Microsoft и Netscape, с помощником Европейская ассоциация производителей компьютеров,

выпустила первую версия стандарта, названная ECMAScript или с официальной формой ECMA-262...

Насколько я был найден в этой книге и что-то вроде этого, JavaScript и ECMAScript одинаковы и различаются только по названию.

С другой стороны, в Dreamweaver, скобке и некоторых других редакторах есть несколько вариантов автозаполнения:

enter image description here

когда я хочу добавить тег script на мою страницу.

Я хочу знать, существуют ли различия между ECMAScript и Javascript и когда следует использовать text/javascript или text/ecmascript?

Ответ 1

TL; DR Просто опустите тег type, если вам не нужны старые браузеры.

ECMAScript - это языковая спецификация, стандартизованная ECMA International как ECMA-262 и ISO/IEC 16262. JavaScript - это язык программирования, который реализует эту спецификацию. ECMAScript существует в нескольких редакциях. Последний выпуск - 6-й (в 2016 году), но большинство реализаций JavaScript пока что соответствуют только 5-му изданию.

Помимо ECMAScript общие реализации JavaScript обычно добавляют больше функциональности, которая может быть стандартизирована другими учреждениями (например, W3C) или может быть проприетарными (то есть "специфичными для браузера") функциями конкретной реализации. Таким образом, вы можете сказать, что ECMAScript представляет собой подмножество JavaScript.

Однако типы MIME для кода JavaScript определены в документе RFC 4329, в котором говорится, что text/javascript и text/ecmascript оба устарели и должны быть заменены на application/javascript и application/ecmascript:

Использование типа "текст" верхнего уровня для этого вида контента известно быть проблематичным. Таким образом, этот документ определяет текст /JavaScript и текст / ecmascript, но помечает их как "устаревшие".

RFC определяет более строгие правила обработки для application/ecmascript, чем для application/javascript, но это относится к обработке параметров MIME-типа и кодированию символов, а не к интерпретации самого кода:

В приведенном случае реализации типов text/javascript, text/ecmascript и application/javascript ДОЛЖНЫ и реализации типа application/ecmascript ДОЛЖНЫ реализовывать требования, определенные в этом разделе: [...]

Для типа носителя application/ecmascript реализации НЕ ДОЛЖНЫ обрабатывать контент, помеченный параметром "версия", как если бы такой параметр не был указан; [...]

Следующее поведение при обработке ошибок РЕКОМЕНДУЕТСЯ для медиа-типов text/javascript, text/ecmascript и application/javascript и ТРЕБУЕТСЯ для медиа-типов application/ecmascript.

Помимо RFC, существует также стандарт HTML5 от W3C: более старые версии говорят, что значением по умолчанию для пустого атрибута type является application/javascript, но более новые версии больше не упоминай ни о каком конкретном MIME-типе. Вместо этого они определяют любой тег script без типа или MIME-типа в качестве так называемого "классического сценария":

Пропуск атрибута, присвоение ему пустой строки или присвоение ему соответствия сущности типа MIME JavaScript означает, что сценарий является классическим сценарием, который должен интерпретироваться в соответствии с продукцией верхнего уровня JavaScript Script. На классические сценарии влияют атрибуты async и defer, но только если установлен атрибут src. Авторы должны опустить атрибут type вместо того, чтобы устанавливать его излишне.

В общем, я бы пропустил атрибут type (как рекомендовано стандартом HTML5) или использовал бы type="text/javascript", если вам требуется поддержка старых браузеров. HTTP-сервер должен обслуживать код JavaScript как application/javascript.